1

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

<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 属性中。该对象的属性绑定到用户可以编辑值的文本框。

我遇到的问题是:由于绑定,当用户编辑信息(编辑玩家姓名,地址,..)时,即使用户没有按下保存按钮,更改也会立即显示在数据网格中.

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

有没有办法做到这一点?

4

1 回答 1

0

一种可能的解决方案:

有一个视图模型的基类:

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 发出信号以更新绑定到该属性的字段。

于 2012-11-17T20:43:16.957 回答