我有一个数据网格,绑定到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属性中。该对象的属性绑定到文本框,用户可以在其中编辑值。
我遇到的问题是:由于绑定,当用户编辑信息(编辑播放器名称,地址等)时,即使用户没有按下保存,数据网格中也会立即显示更改。 - 但是。但
我显然不希望这样,因为还有取消选项和验证。我知道你可以绑定一次或单向,但是当用户按下保存按钮时,应该显示更改。
有没有办法做到这一点?
答案 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更新绑定到该属性的字段。