[英]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.