簡體   English   中英

WPF 組合框顯示值不更新

[英]WPF Combobox display value doesn't update

我在我們的雙語言應用程序中與 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 派生,這是相當復雜的。 集合項必須實現 INotifyPropertyChanged,並且集合具有每個項的 PropertyChanged 事件的偵聽器。

當下拉列表和所選項目值更新時,看起來組合的顯示文本沒有更新。

做一件事。 在按鈕單擊中, 1. 獲取組合框中選定的索引 2. 替換集合中的所有字符串 3. 使用我們之前在步驟 1 中存儲的選定索引設置組合框的 selecteditem 屬性。

綁定 ObservableCollection(以及派生類)僅在您添加或刪除項目的情況下起作用,因為這是調用更改事件的操作。 如果您需要操作集合內的數據,我建議使用 BindingList。 也許某種包裝可以為您提供解決方案。

所以,有點晚了,但我們剛剛在一個需要支持多種語言的項目上遇到了同樣的問題。

我們的解決方案是在屬性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但這也不起作用。 有一個新實例工作。

希望這有助於並節省您的時間,干杯!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM