WPF组合框显示值不';t更新
本文关键字:更新 组合 显示 WPF | 更新日期: 2023-09-27 18:26:45
我正在与我们的双语应用程序中的WPF组合框进行激烈的斗争。我已将组合框绑定到集合中。我有一个按钮,可以用另一种语言中的相应字符串值替换集合的值。问题是什么:我从下拉列表中选择了一个值。我通过按下按钮来更改语言,然后显示的值保持在旧语言上,但当下拉菜单被删除时,中的值将被替换为正确的值。这是我的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}" />
更新:因为这是在评论中提出的,我必须补充一点collectionis是我们的一个自定义类,源于ObservableCollection,相当复杂。集合项必须实现INotifyPropertyChanged,并且集合具有每个项的PropertyChanged事件的侦听器。
当下拉列表和所选项目值更新时,组合框的显示文本似乎没有更新。
做一件事。在按钮点击中,1.在组合框中获取所选索引2.替换集合中的所有字符串3.使用我们前面在步骤1中存储的选定索引设置组合框的selecteditem属性。
所以,现在有点晚了,但我们刚刚在一个需要支持多种语言的项目上遇到了同样的问题。
我们的解决方案是在属性getter
上返回一个新的ObservableCollection
实例。
所以,你的代码应该是这样的:
<ComboBox x:Name="ProjectClassComboBox"
ItemsSource="{Binding Path=ProjectClassCollection}"/>
在你的ViewModel
:
public ObservableCollection<Project> ProjectClassCollection
{
get {return new ObservableCollection<Project>(){_projectClassCollection};}
set {...}
}
这段代码是我记忆中的一个快速片段。如果你只是复制意大利面,它不会起作用,但想法是另一个收集实例对我们有效。
我们试图呼叫OnPropertyChanged(nameof(ProjectClassCollection))
,但没有成功。我们试图在XAML中设置UpdateSourceTrigger=PropertyChanged
,但也没有成功。有一个新的实例起作用。
希望这能帮你节省时间,干杯!