我正在努力实现一个简单的事情,或者我认为这很简单,但我不知道它是否可能......
想象一下以下场景......在ViewModel中,我有一个名为SelectedProduct的属性和一个名为NewProduct的属性(两者都是相同的类型,模型)。
在我的MainWindow中,我们有一个ListView和两个按钮,一个是Add按钮,另一个是Update按钮(这个将更新ListView中的Selected Item),两个按钮都将打开同一个窗口但是会不同的事情。
我在按钮中使用命令,所以我想如果单击MainWindow的Add按钮或使用其他Command,我可以使用一个Command。
因此,如果我们单击Add按钮,第二个窗口中的控件(TextBoxes和ComboBoxes)将绑定NewProduct属性,如果我们单击Update按钮,第二个窗口将绑定SelectedProduct属性。
有没有办法实现这个目标?
提前致谢
答案 0 :(得分:2)
为什么不创建一个EditedProduct
属性并给出相应的值?
答案 1 :(得分:0)
我可以看到两种适用于这种情况的方法是使用两个不同的命令,如你所述,每个命令都会以不同的方式调用Window
。
第一个选项是为Window
创建两个构造函数(一个用于Add,另一个用于Update),或者只创建一个传入枚举值作为参数。
public void Window2(DisplayMode mode)
其中DisplayMode
是enum
,其中包含两个值(Add
和Update
)
或
public void Window2() // The default 'Add' window
{
}
public void Window2(ModelObject instance) // The 'Update' window
{
}
第二个选项是使Window
私有的构造函数,并在类上创建静态方法来创建Window的实例并将其显示给用户。 / p>
这可以像
一样使用 Window2.UpdateItem(selectedItem)
使用这些方法中的每一个将窗口实例的DataContext设置为您想要编辑的对象(对象的新实例或传递给构造函数的实例)
答案 2 :(得分:0)
查看以下视图模型。
您可以创建一个新属性,该属性将绑定到您的视图,您可以根据按钮命令更改属性参考。
在下面的代码中,我创建了一个已编辑的属性(Binded to view),我已经在添加按钮命令执行时为其分配了Newproduct,并在更新时分配了SelectedProduct ..
class Viewmodel : ViewModelBase
{
private void AddCommandExecute(object o)
{
// your logic
EditedProduct = NewProduct;
}
private void UpdateCommandExecute(object o)
{
// your logic
EditedProduct = SelectedProduct;
}
private Product _selectedProduct;
public Product SelectedProduct
{
get { return _selectedProduct; }
set
{
_selectedProduct = value;
OnPropertyChanged("SelectedProduct");
}
}
private Product _newProduct;
public Product NewProduct
{
get { return _newProduct; }
set
{
_newProduct = value;
OnPropertyChanged("NewProduct");
}
}
private Product _editedProduct;
public Product EditedProduct
{
get { return _editedProduct; }
set
{
_editedProduct = value;
OnPropertyChanged("EditedProduct");
}
}
}