我有DataGrid
用户可以插入新数据。如果用户决定不继续保存新行,则取消添加,数据保持为打开记录时的状态。为了解决这个问题,我已经解决了我需要(我很确定,至少)清除网格然后刷新它。
但是,我的数据绑定到CollectionViewSource
中的ResourceDictionary
,而DataGrid
的ItemsSource是该CVS的属性,我无法在代码中找到它-behind。
xaml:
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../AllStyles.xaml" />
<ResourceDictionary Source="AuditCollectionSource.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<DataGrid Grid.Row="1" Name="dgridManagementIssues" AutoGenerateColumns="False"
ItemsSource="{Binding Path=AuditManagementIssues, Mode=TwoWay}" >
<DataGrid.Columns>
...
<Button Name="btnCancel" Content="Cancel" Click="btnCancel_Click" />
因此,当单击取消按钮时,我从DataGrid获取ItemsSource并清除它。然后我想将其设置为'AuditManagementIssues'ItemsSource
:
CS:
private void btnCancel_Click(object sender, RoutedEventArgs e)
{
// clear the grid
ObservableCollection<AuditManagementIssue> issues = new ObservableCollection<AuditManagementIssue>();
dgridManagementIssues.ItemsSource = issues;
issues.Clear();
// repopulate the grid
// reload the model?
lGFinanceEntities.Entry<AuditStatement>(currentAuditStatement).Reload();
dgridManagementIssues.ItemsSource = AuditManagementIssues; <-- can't do this
}
intellisense告诉我当前上下文中不存在名称“AuditManagementIssues”。
当窗口关闭并再次打开时,所有数据都应该是它所在的位置。
那么,如何从代码隐藏中刷新/重新加载数据呢?或者,是否有更好的方法可以删除已输入但未保存到DataGrid
的项目。
答案 0 :(得分:0)
逻辑上,AuditManagementIssues
在当前上下文中不存在,因为它在Path
中为Binding
。因此,您可以再次为Binding
ItemsSource
设置dgridManagementIssues
:
BindingOperations.SetBinding(dgridManagementIssues, DataGrid.ItemsSourceProperty, new Binding("AuditManagementIssues") { Mode = BindingMode.TwoWay });
如果未将ItemsSource设置为新值,则可以从后面的代码更新bindig:
BindingOperations.GetBindingExpression(dgridManagementIssues, DataGrid.ItemsSourceProperty)?.UpdateTarget();
答案 1 :(得分:0)
使用您的代码,您可以确保您绑定到CollectionView而不仅仅是CollectionViewSource。 CollectionView有一个Refresh方法。 https://msdn.microsoft.com/en-us/library/system.windows.data.collectionview.refresh(v=vs.110).aspx
你可以从一个窗口的资源中获取一个collectionviewsource并获取它的默认视图,然后使用以下代码刷新它:
CollectionViewSource cvs = this.Resources["AuditManagementIssues"] as CollectionViewSource;
var lcv = (ListCollectionView)CollectionViewSource.GetDefaultView(cvs);
lcv.Refresh();