gpt4 book ai didi

c# - DataGrid 更新添加的行但不更新添加的列

转载 作者:太空宇宙 更新时间:2023-11-03 13:37:57 25 4
gpt4 key购买 nike

我有一个带有数据绑定(bind)的 MVVM 应用 DataGrid绑定(bind)到 Resources<ResourceViewModel> .我将附加资源/行添加到 DataGrid 中显示的资源数据中通过

private void OnResourceAddedToCollection(object sender, ResourceCollectionChangedEventArgs e)
{
var viewModel = new ResourceViewModel(e.NewResource);
Resources.Add(viewModel);
}

这行得通。但是,我采用完全相同的方法并尝试将列添加到 DataGrid通过

private void OnResourceCultureCollectionChanged(object sender, 
ResourceCulturesCollectionChangedEventArgs e)
{
Resources.Clear();
foreach (var rvm in e.NewResourceCollection.Select(r => new ResourceViewModel(r)).ToList())
Resources.Add(rvm);
}

事件参数保存更新的基础 Resource秒。现在我已经检查了数据并且它是正确的 - 正在添加列,但是 DataGrid不显示新列。 我做错了什么?

最佳答案

添加列时,您需要重新绘制数据网格,重置您的 DataGrid.ItemSource 即可。

查看:

public SomeView(IViewModel vm)
{
ViewModel = vm;
DataContext = ViewModel;

InitializeComponent();

ViewModel.PropertyChanged += (s, e) =>
{
switch (e.PropertyName)
{
case "IsResetingColumns":
if (!ViewModel.IsResetingColumns)
{
dataGrid.ItemsSource = null;
dataGrid.ItemsSource = ViewModel.Resources;
}
break;
}
};
}

View 模型:

public class ViewModel : INotifyPropertyChanged
{
private bool _isResetingColumns;

public bool IsResetingColumns
{
get
{
return _isResetingColumns;
}
set
{
if (_isResetingColumns == value)
return;
_isResetingColumns = value;
OnPropertyChanged("IsResetingColumns");
}
}

private void OnResourceCultureCollectionChanged(object sender,
ResourceCulturesCollectionChangedEventArgs e)
{
//VIEWMODEL IS SETTING THIS TO TRUE BEFORE RESETTING `RESOURCES`
IsResetingColumns = true;

Resources.Clear();
foreach (var rvm in e.NewResourceCollection.Select(r => new ResourceViewModel(r)).ToList())
Resources.Add(rvm);

//VIEW'S LISTENING TO THIS PROPERTY CHANGED (naming could be better, or an event ,but the gist is there)
IsResetingColumns = false;
}

关于c# - DataGrid 更新添加的行但不更新添加的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18083831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com