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事件的侦听器。

当下拉列表和所选项目值更新时,组合框的显示文本似乎没有更新。

WPF组合框显示值不';t更新

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

做一件事。在按钮点击中,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,但也没有成功。有一个新的实例起作用。

希望这能帮你节省时间,干杯!