【问题标题】:WPF Combobox textbox not updating when binding changes绑定更改时 WPF 组合框文本框不更新
【发布时间】:2023-04-04 18:53:01
【问题描述】:

我有一个如下的 WPF 组合框:

<ComboBox 
   ItemsSource="{Binding Source={StaticResource myList}}"
   SelectedItem="{Binding Path=mySelectedItem}"
/>

我遇到的问题是,当绑定值更改时,组合框文本框中的选定值不会更新。 (注意 - 组合框列表中的值会更新)。

我正在使用 MVVM,因此我可以在视图模型中检测到绑定更改并调用属性更改事件,这是更新组合框,而不是文本框中显示的值。

我认为这可以在组合框的模板中完成 - 以某种方式使文本框绑定到组合框的选定项,或者在更新时总是更新?

编辑:

我没有说清楚 - 我确实正确实施了 INotifyPropertyChanged,当值更改时,我为 myList 和 mySelectedItem 提高 PropertyChanged。问题是组合框中的文本框没有刷新。

我发现了一个类似的问题:

WPF ComboBox SelectedItem not Updating

这给出了答案的提示,但不幸的是还不够。

【问题讨论】:

    标签: c# wpf xaml combobox selecteditem


    【解决方案1】:

    我已经为你更新了答案here

    希望对你有帮助!!

    【讨论】:

      【解决方案2】:

      很可能您的mySelectedItem 不是依赖属性。或者,包含类没有实现INotifyPropertyChanged

      考虑您的值既不是依赖属性也不是INotifyPropertyChanged 的属性的情况。在这种情况下,WPF 没有机会知道其值已更改,因此该值在开始时仅加载一次(使用反射)。

      对于依赖属性的情况,或者当包含对象支持INotifyPropertyChanged时,WPF框架可以订阅值的变化,从而更新组合框。

      【讨论】:

        【解决方案3】:

        如果您希望所选项目在您的“myList”集合后面的值发生变化时发生变化,那么它不会发生变化。如果您使用 MVVM 并且正在视图模型中实现 INotifyPropertyChanged。然后,当您为 myList 提升 PropertyChanged 时,如果您希望它以任何方式重新绑定或更改,您还应该为“mySelectedItem”提升它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-11-03
          • 2011-09-22
          • 1970-01-01
          • 2011-06-15
          • 1970-01-01
          • 2015-09-14
          • 2012-06-17
          • 1970-01-01
          相关资源
          最近更新 更多