gpt4 book ai didi

c# - 将所选项目作为命令参数传递与使用绑定(bind)的 ViewModel 对象 (MVVM)

转载 作者:行者123 更新时间:2023-11-30 14:55:22 26 4
gpt4 key购买 nike

希望这是一个简单的 MVVM 问题,但我正在尝试掌握命令参数。

我让用户从列表框中选择一个项目,然后单击“删除所选项”。 ListBox 将 SelectedItem 绑定(bind)到“SelectedTemplate”。我的按钮 XAML 如下所示:

<Button CommandParameter="{Binding SelectedTemplate}" Command="{Binding DeleteTemplateCommand}" Content="Delete Selected"/>

当我到达我的执行命令时,我正在从命令中读取参数。但是,我也可以访问“SelectedTemplate”。如果我使用传递的参数,那么我必须在删除对象之前将其转换为正确的对象类型,而不是继续删除“selectedTemplate”

public void DeleteTemplate(object template)
{
Convert.ChangeType(template, typeof(Template));
if (template == SelectedTemplate )
{
_ESTContext.Templates.Remove(SelectedTemplate);
}
}

我的问题是,对我来说,这似乎都满足 MVVM 哲学,使用其中一个有好处/坏处吗?

最佳答案

唯一真正的区别是可读性(并且引擎可能需要评估一个额外的绑定(bind),但在这种情况下这不会真正伤害到您)。

无论哪种方式,您都在使用 SelectedTemplate,因此我不会费心将它绑定(bind)到参数并直接使用它。

除非那是你唯一使用SelectedTemplate 的东西,在这种情况下我会把它作为一个变量扔掉,并直接绑定(bind)到选择:

<Button CommandParameter="{Binding ElementName=MyListBox, Path=SelectedItem}" Command="{Binding DeleteTemplateCommand}" Content="Delete Selected"/>

关于c# - 将所选项目作为命令参数传递与使用绑定(bind)的 ViewModel 对象 (MVVM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25452189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com