WPF Combobox显示值不会更新

时间:2014-10-15 11:09:58

标签: c# wpf xaml combobox

我在双语应用程序中与WPF Combobox进行了激烈的斗争。 我将组合框绑定到一个系列。我有一个按钮,用其他语言的相应字符串值替换集合的值。 问题是什么:我从下拉列表中选择一个值。我通过按下按钮更改语言,然后显示的值保留在旧语言上,但是当删除下拉列表时,其中的值将替换为正确的值。 这是我的XAML:

<ComboBox x:Name="ProjectClassComboBox"
                  Width="150"
                  ItemsSource="{Binding Path=ProjectClassCollection}"
                  DisplayMemberPath="Name"
                  SelectedValuePath="Id"
                  SelectedValue="{Binding Path=RegionContext.CurrentItem.ClassNomenclatureId, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

更新:因为在评论中询问我必须添加 该集合是我们的自定义类,来自ObservableCollection的DERIVED,相当复杂。集合项必须实现INotifyPropertyChanged,并且该集合具有每个项的PropertyChanged事件的侦听器。

当更新下拉列表和所选项目值时,看起来似乎未更新组合的显示文本。

3 个答案:

答案 0 :(得分:0)

做一件事。在按钮单击中, 1.在组合框中获取所选索引 2.替换集合中的所有字符串 3.使用我们之前在步骤1中存储的所选索引设置组合框的selecteditem属性。

答案 1 :(得分:0)

绑定ObservableCollection(以及也是已开发的类)仅在您添加或删除项目的情况下有效,因为这是调用change事件的操作。如果你需要操作集合中的数据,我建议使用BindingList。也许某种包装将是你的解决方案。

答案 2 :(得分:0)

太晚了,但是我们在一个需要支持多种语言的项目中遇到了同样的问题。

我们的解决方案是在属性a_func a_func a_func a_func 上返回ObservableCollection的新实例。

因此,您的代码应如下所示:

getter

在您的<ComboBox x:Name="ProjectClassComboBox" ItemsSource="{Binding Path=ProjectClassCollection}"/> 中:

ViewModel

这段代码是我记忆中的一小段。如果您仅复制粘贴,将无法正常工作,但其想法是另一个集合实例可为我们工作。

我们尝试致电public ObservableCollection<Project> ProjectClassCollection { get {return new ObservableCollection<Project>(){_projectClassCollection};} set {...} } ,但没有成功。我们试图在XAML中设置OnPropertyChanged(nameof(ProjectClassCollection)),但这也不起作用。有一个新的实例工作。

希望这会有所帮助,并节省您的时间,干杯!