2012-11-15 48 views
0

我有一个绑定到一个球员的属性数据网格:实体框架 - 绑定到数据网格

<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" IsEnabled="{Binding Editing, Converter={StaticResource InverseBooleanConverter}}" Grid.RowSpan="2" Grid.ColumnSpan="2"> 

此玩家属性的定义如下:

public List<Player> Players 
{ 
    get { return repository.Players.OrderBy(x => x.Firstname).ToList(); } 
} 

库包含从EF一个DBSet。

当我添加一名球员,我用这个代码:

private void SaveExecute(object parameter) 
{ 
    repository.SavePlayer(currentPlayer); 
    Editing = false; 
} 

我想什么现在要做的很简单:创建新的播放器时,数据网格应该刷新。它绑定到Players属性,但没有使用过setter,所以在那里调用RaisePropertyChange是不可能的。

我被困在这里。如何正确地绑定它,以便在调用SavePlayer() - 方法时,数据网格会更新并显示新玩家?

我找到的最简单的解决方案是调用RaisePropertyChanged(“Players”);在SaveExecute()方法:

private void SaveExecute(object parameter) 
{ 
    repository.SavePlayer(currentPlayer); 
    RaisePropertyChanged("Players"); 
    Editing = false; 
} 

但...这是允许的或者是这个东西你不应该做?你是否应该在属性的setters中调用RaiseProperyChanged?

感谢

回答

1

改变List<Player>ObservableCollection<Player>。这是一种特殊类型的集合,当事件被添加/删除时,它会通知事件。 WPF会自动处理这些事件并相应地更新UI。

然后在你的Save(),只是Players.Add(newitem);,你会看到反映在UI的变化。

0

要回答你的问题,这是完全合法的呼叫从自己保存execute方法RaisePropertyChanged,或其他任何地方,你需要让UI知道事情有了变化。

这是最好的方法吗?个人而言,我可能不会考虑使用MVVM模式。但是,如果它适合你,那么它没有任何问题。

+0

是的,我想使用MVVM模式。但我不明白如何正确使用它在这里... – Bv202