簡體   English   中英

實體框架-綁定到數據網格

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM