[英]Entity Framework - binding to datagrid
我有一個綁定到Players屬性的datagrid:
<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">
此Players屬性的定義如下:
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;
}
但是...這是允許的,還是您不應該這樣做? 您是否應該僅在屬性的設置器中調用RaiseProperyChanged,這也可以嗎?
謝謝
更改List<Player>
為ObservableCollection<Player>
。 這是一種特殊的集合,它具有事件以通知何時添加/刪除項目。 WPF自動處理這些事件並相應地更新UI。
然后在您的Save()
,只有Players.Add(newitem);
您將看到反映在用戶界面中的更改。
要回答您的問題,從保存執行方法中調用RaisePropertyChanged
或在其他任何需要讓UI知道發生了更改的地方調用RaisePropertyChanged
完全合法的。
這是最好的方法嗎? 就個人而言,可能不是,我會考慮使用MVVM模式。 但是話又說回來,如果它對您有用,那么它沒有任何問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.