ViewModel如何在WPF / MVVM中的View中请求更新?

时间:2012-03-26 13:48:51

标签: wpf mvvm

我的View中的控件上有一个依赖项属性,它绑定到我的ViewModel上的一个字段。当用户单击菜单项时,我希望控件更新该属性的值,以便ViewModel可以将其保存在XML文件中。 ViewModel请求View更新该属性的正确机制是什么?

3 个答案:

答案 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而是菜单本身。当我将菜单项从菜单中移出时,它可以正常工作。