我的View中的控件上有一个依赖项属性,它绑定到我的ViewModel上的一个字段。当用户单击菜单项时,我希望控件更新该属性的值,以便ViewModel可以将其保存在XML文件中。 ViewModel请求View更新该属性的正确机制是什么?
答案 0 :(得分:1)
通常,MVVM控件会在编辑时立即更新其绑定属性(而不是字段)。 ViewModel是“状态”,View只是查看该状态的一种方式。
您的控件应在编辑时更新ViewModel。然后,当调用菜单命令时,ViewModel可以将其保存到XML。
答案 1 :(得分:0)
您的对象必须实现INotifyPropertyChanged
界面,您的属性应如下所示
private string _property;
public string Property
{
get { return _property; }
set
{
if(_property == value) return;
_property = value;
RaisePropertyChanged("Property");
}
}
因此,对属性所做的每个更改都将通过绑定机制进行级联查看。
菜单项命令属性将绑定到视图模型中声明的命令,它将触发视图模型上的方法并设置属性值。更改将级联查看:
menuItem.Click - > menuItem.Command.Execute - > viewModel.method - >更改视图模型属性 - >提高财产变更事件 - >视图属性通过绑定更改
答案 2 :(得分:0)
我遇到的问题是,在TextBox中写入后立即点击菜单项时,viewmodel没有更新。
使用参数UpdateSourceTrigger = PropertyChanged,它适用于TextBoxes:
<TextBox Grid.Column="5" Grid.Row="7" Text="{Binding SelectedPerson.Room, UpdateSourceTrigger=PropertyChanged}"></TextBox>
但遗憾的是不适用于DatePickers ......
奇怪的是,当点击按钮而不是菜单项时,DatePicker正在更新视图模型。 由于我现在没有更多时间寻找错误修正,我只是将菜单项改为按钮。
编辑:问题不是menuitem而是菜单本身。当我将菜单项从菜单中移出时,它可以正常工作。