2012-11-15 79 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