gpt4 book ai didi

wpf - 使用 INotifyPropertyChanged 而不是 DependencyProperties 进行数据绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 10:52:16 27 4
gpt4 key购买 nike

一个多星期以来,我一直在努力让数据绑定(bind)在 WPF 中工作。我确实在这里获得了有关 DataContext 的宝贵帮助,并且我确实通过 DependencyProperties 使数据绑定(bind)工作。在学习数据绑定(bind)时,我遇到了很多关于 INotifyPropertyChanged 的讨论。以及它在很多方面都比 DP 更好。我想我会试一试。

我正在使用 Josh Smith 的基本 ViewModel 类,而我的 ViewModel 就是从它派生的。但是,我在让数据绑定(bind)工作时遇到了一些麻烦,希望这里有人能告诉我哪里出错了。

在我的 ViewModel 类中,我有一个 ObservableCollection<string> .在我的 GUI 中,我有一个绑定(bind)到此 OC 的组合框,即

<ComboBox ItemsSource="{Binding PluginNames}" />

GUI 的 DataContext 设置为 ViewModel,即
private ViewModel _vm;

public GUI()
{
InitializeComponent();
_vm = new ViewModel();
this.DataContext = _vm;
}

并且 ViewModel 具有名为“PluginNames”的 OC:
public class ViewModel
{
public ObservableCollection<string> PluginNames; // this gets instantiated and added to elsewhere
}

加载 GUI 时,会调用一个方法来实例化 OC 并向其添加插件名称。修改OC后,我调用 RaisePropertyChanged( "PluginNames") .我期待,因为 WPF 数据绑定(bind)模型认识到 INotifyPropertyChanged,这就是我需要做的所有事情,它会“神奇地工作”并使用加载的插件更新组合框项目......但它没有。

有人可以指出我在这里做错了什么吗?谢谢!

更新:我不知道为什么,但现在不是没有进行任何明显的更新,而是根本找不到该属性。我认为我真的很愚蠢,并且在某个地方错过了重要的一步。

最佳答案

当您使用 INotifyPropertyChanged 时,有两点:

  • 您需要使用属性,而不是字段
  • 设置 hte 属性时,应始终引发属性更改事件。

  • 您需要对其进行返工,使其看起来更像:
    private ObservableCollection<string> pluginNames;
    public ObservableCollection<string> PluginNames
    {
    get { return pluginNames; }
    set {
    this.pluginNames = value;
    RaisePropertyChanged("PluginNames"); // This should raise the PropertyChanged event - use whatever your VM class does for this
    }
    }

    这应该会导致一切重新填充。

    关于wpf - 使用 INotifyPropertyChanged 而不是 DependencyProperties 进行数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1976560/

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