Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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
Wpf 使用viewmodel中的Datagrid.Items.Refresh()_Wpf_Xaml_Mvvm_Datagrid - Fatal编程技术网

Wpf 使用viewmodel中的Datagrid.Items.Refresh()

Wpf 使用viewmodel中的Datagrid.Items.Refresh(),wpf,xaml,mvvm,datagrid,Wpf,Xaml,Mvvm,Datagrid,我使用的是MVVM模式。 我想使用datagrid的刷新方法。 我还浏览了以下链接及其有用信息: 但我的问题是:我在viewmodel中创建了一个datagrid对象,如下所示: public DataGrid ActiveGrid=new DataGrid(); public void RefreshGrid() { View.Dispatcher.Invoke((Action)(() => ActiveGr

我使用的是MVVM模式。 我想使用datagrid的刷新方法。 我还浏览了以下链接及其有用信息:

但我的问题是:我在viewmodel中创建了一个datagrid对象,如下所示:

    public DataGrid ActiveGrid=new DataGrid();
public void RefreshGrid()
        {
           View.Dispatcher.Invoke((Action)(() =>
                ActiveGrid.Items.Refresh()

                ));
        }
并且我的datagrid的itemsource已经绑定到另一个集合,例如

<DataGrid x:Name="ActiveGrid"
                      IsReadOnly="True"                      
                      ItemsSource="{Binding ActiveCallCollection}"
                       SelectedItem="{Binding ActiveGridCollection,
                                             Mode=TwoWay}" SelectionMode="Single"
                      Visibility="{Binding IsActiveCallsSelected,
                                           Converter={StaticResource BooleanToVisibilityConverter}}"
                      d:LayoutOverrides="Height">


如何将ActiveGrid绑定到xaml datagrid。

如果ViewModel中有datagrid对象,那么它就不再是MVVM了。你最好问问你想要实现什么,这样我们才能帮助你

如果您绑定到OberservableCollection-您应该绑定到此一次!所有更改(添加、删除)都会反映在datagrid中


请将您的代码张贴在创建/更改收藏的地方

如果您使用MVVM设计模式,您的视图模型不应该有DataGrid

相反,您的
视图
应该有一个
数据网格
,并且应该绑定到ViewModel中的
可观察集合

确保绑定
itemsource
属性,而不是设置它,否则对
可观察集合的更改可能不会在UI中自动更新

<DataGrid x:Name="ActiveGrid"
          IsReadOnly="True"                      
          ItemsSource="{Binding ActiveCallCollection}"
          SelectedItem="{Binding Selected ActiveCall}" 
          SelectionMode="Single"
          Visibility="{Binding IsActiveCallsSelected,
                               Converter={StaticResource BooleanToVisibilityConverter}}"
          d:LayoutOverrides="Height">


我不确定您为什么要在viewmodel中创建此项。如果由于向ActiveCallCollection添加了项而要更新datagrid,则需要使用INotifyPropertyChanged来告诉UI该集合中发生了一些更改。如果您确实要对集合进行数据绑定并动态添加项,我建议您使用ObservableCollection。如果向该集合添加项目,它将通知自己已获得新项目。my ActiveCallCollection实际上是一个ObservableCollection。我还尝试了INotifyPropertyChanged。但当我切换行时,datagrid会得到更新,一旦数据进入ObservableCollection,datagrid就无法工作。或者可以直接在xaml窗口中使用refresh()方法。如何?好的,来回答你的问题“如何将ActiveGrid绑定到xaml datagrid”。你可以从xaml中删除datagrid,使其成为ContentPresenter,并使ActiveGrid成为公共属性<代码>
但我认为这不是正确的选择。如果在构造函数之后创建了新的可观察集合,则需要NotifyPropertyChanged该集合。我的要求是必须有datagrid。那么,除了使用ItemsSource之外,是否还有其他选项将我的ActiveGrid对象绑定到datagrid?datagrid不是显示实时更新数据的合适控件。如果用户在字段中输入数据并在后台进行更新以消除用户的编辑,会发生什么情况?实际上你是对的。但是请告诉我可以从哪里调用ActiveGrid.Items.Refresh()。因为我们不希望从*.xaml.cs调用它。不过,如果您愿意,我可以发布更多代码。如果您使用mvvm并绑定到observablecollection,则无需调用refresh。您的项目将自动更新。您应该发布哪些代码行不会更新网格。当然,您的viewmodel中的代码行:)也许我们可以找到解决方案then@deathrace.dj
DataGrid
是一个UI组件,因此它不应该与数据类(ViewModels)混合在一起。此外,任何仅与UI相关的操作,例如刷新控件,都应该在视图后面的代码中完成