Datagrid - 不会在每次更改属性时更新,仅在保存时更新

时间:2012-11-17 20:31:58

标签: c# wpf mvvm

我有一个数据网格,绑定到List:

<DataGrid HorizontalAlignment="Left" SelectedItem="{Binding CurrentPlayer}" Height="374" Margin="121,22,0,0" RowHeaderWidth="0" VerticalAlignment="Top" Width="836" ItemsSource="{Binding Players}" AutoGenerateColumns="false" IsReadOnly="True" SelectionMode="Single" >

如您所见,当选择某个项目时,它将存储在CurrentPlayer属性中。该对象的属性绑定到文本框,用户可以在其中编辑值。

我遇到的问题是:由于绑定,当用户编辑信息(编辑播放器名称,地址等)时,即使用户没有按下保存,数据网格中也会立即显示更改。 - 但是。但

我显然不希望这样,因为还有取消选项和验证。我知道你可以绑定一次或单向,但是当用户按下保存按钮时,应该显示更改。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

一种可能的解决方案:

有一个viewmodel的基类:

class BaseClassViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            Debug.Print(info);
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }
}

使所选对象的每个字段的每个属性成为此表单中的get set属性:

    public string FieldInObject
    {
        get
        {
            return _FieldInObject;
        }
        set
        {
            if (value != _FieldInObject)
            {
                _FieldInObject = value;
                //do not add this code here
                //NotifyPropertyChanged("CurrentPlayer");
            }
        }
    }

当用户按下保存按钮时,请使用

NotifyPropertyChanged("CurrentPlayer");
NotifyPropertyChanged("<Property 1 in currentPlayer>"); 
 .....
NotifyPropertyChanged("<Property n in currentPlayer");

它应该通知WPF更新CurrentPlayer。

我希望这有点可以理解。只需使用NotifyPropertyChanged来通知WPF更新绑定到该属性的字段。