gpt4 book ai didi

c# - 为什么 UI 不会在 RaisePropertyChanged 上更新?

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

我有一个静态 IList,它充当静态类中的存储库:

//静态类设置

public static IList RecentSearchedRepo = new ObservableCollection<object>();

还有一个 IList 位于我将 UI 网格绑定(bind)到的另一个类中:

//组件类

private IList recentsearch = new ObservableCollection<object>();
public IList RecentSearch
{
get
{
return recentsearch;
}
set
{
recentsearch = value;
RaisePropertyChanged("RecentSearch");
}
}

我将对象添加到 RecentSearchedRepo :

RecentSearchedRepo.add(searchitem)

然后将 RecentSearch 设置为静态列表

RecentSearch = Settings.RecentSearchedRepo;

XAML 片段:

<GridLayout:RecentSearchGrid x:Name="recentSearchGrid" ItemsSource="{Binding RecentSearch}" />

来自扩展 UserControl 的 RecentSearchGrid 类的片段:

 public IList ItemsSource
{
get
{
return GetValue(ItemsSourceProperty) as IList;
}
set
{
SetValue(ItemsSourceProperty, value);
}
}

private static readonly DependencyProperty ItemsSourceProperty =
DependencyProperty.Register("ItemsSource", typeof(IList), typeof(RecentSearchGrid), new PropertyMetadata(null, OnItemsSourcePropertyChanged));


private static void OnItemsSourcePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
RecentSearchGrid source = d as RecentSearchGrid;

if (source != null)
{
source.setListforgrid(source.ItemsSource);
}
}

问题是,当我将第一项添加到 RecentSearchedRepo 时,UI 会更新,但在每次后续添加时,UI 都不会更新。

最佳答案

代替:

RecentSearch = Settings.RecentSearchedRepo;

尝试做:

RecentSearch.Clear();
var freshData = Settings.RecentSearchedRepo;
if (freshData != null)
foreach (var item in freshData)
RecentSearch.Add(item);

您正在通过重新分配引用来终止绑定(bind)。

编辑:在你之后

你在倒退:OnItemsSourcePropertyChanged 不应该设置源,它实际上根本不应该存在。
您必须在 RecentSearchGrid.xaml 中绑定(bind)到在 RecentSearchGrid.xaml.cs

中声明的 ItemsSource 依赖属性

关于c# - 为什么 UI 不会在 RaisePropertyChanged 上更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14161348/

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