Wpf 使用viewmodel中的Datagrid.Items.Refresh()
我使用的是MVVM模式。 我想使用datagrid的刷新方法。 我还浏览了以下链接及其有用信息: 但我的问题是:我在viewmodel中创建了一个datagrid对象,如下所示: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
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.djDataGrid
是一个UI组件,因此它不应该与数据类(ViewModels)混合在一起。此外,任何仅与UI相关的操作,例如刷新控件,都应该在视图后面的代码中完成