我在双语应用程序中与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事件的侦听器。
当更新下拉列表和所选项目值时,看起来似乎未更新组合的显示文本。
答案 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))
,但这也不起作用。有一个新的实例工作。
希望这会有所帮助,并节省您的时间,干杯!