Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架-绑定到datagrid_C#_Wpf_Entity Framework_Mvvm - Fatal编程技术网

C# 实体框架-绑定到datagrid

C# 实体框架-绑定到datagrid,c#,wpf,entity-framework,mvvm,C#,Wpf,Entity Framework,Mvvm,我有一个绑定到玩家属性的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"

我有一个绑定到玩家属性的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">
我现在想做的很简单:当创建新播放器时,datagrid应该刷新。它绑定到Players属性,但从未使用setter,因此不可能在那里调用RaisePropertyChange

我被困在这里了。如何正确绑定它,以便在调用SavePlayer()方法时,数据网格将更新,从而显示新的播放器

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

但是。。。这是允许的还是你不应该做的?您应该只在的属性设置器中调用RaisePropertyChanged,这样也可以吗


谢谢回答您的问题,从save-execute方法调用
RaisePropertyChanged
,或者在任何需要让UI知道某些内容已更改的地方调用
RaisePropertyChanged
,都是完全合法的

这是最好的方法吗?我个人可能不会考虑使用MVVM模式。但是,同样,如果它对您有效,那么它没有问题。

更改
列表
以获得
可观察到的收集。这是一种特殊类型的集合,在向其中添加/删除项时会通知事件。WPF自动处理这些事件并相应地更新UI


然后在
Save()
中,只需
Players.Add(newitem)您将看到UI中反映的更改。

是的,我想使用MVVM模式。但我不知道如何在这里正确使用它。。。
public List<Player> Players
{
    get { return repository.Players.OrderBy(x => x.Firstname).ToList(); }
}
private void SaveExecute(object parameter)
{
    repository.SavePlayer(currentPlayer);
    Editing = false;
}
private void SaveExecute(object parameter)
{
    repository.SavePlayer(currentPlayer);
    RaisePropertyChanged("Players");
    Editing = false;
}