![](/img/trans.png)
[英]ComboBox items not updating when underlying ObservableCollection changes
[英]Binding not updating in ComboBox Text field when underlying ComboBox item description changes
我的ComboBox存在綁定更新問題。 我的ComboBox的ItemSource綁定到LaneConfigurations列表。 ComboBox的SelectedItem綁定到我后面的代碼中的SelectedLaneConfiguration屬性。 我將ComboBox的ItemTemplate配置為顯示每個LaneConfiguration的'DisplayID'屬性。
這在大多數情況下都有效。 但是,更改通道配置可能會導致DisplayID更改。 如果您選擇了特定的車道,並且其DisplayID被顯示為ComboBox的“文本”,然后更改LaneConfiguration對象,則ComboBox的“文本”部分不會更新為應顯示的新“ DisplayID” 。 當我單擊組合框上的下拉箭頭時,在列表中顯示為選定項的項目顯示正確的DisplayID,但與在“文本”中組合框頂部顯示的“ DisplayID”不匹配字段。
在后面的代碼中,我在“ SelectedLaneConfiguration”屬性上觸發了PropertyChanged事件。 如何使ComboBox意識到'DisplayID'屬性需要更新? 我試圖為“ DisplayID”屬性觸發PropertyChanged事件,但它是LaneConfiguration類的一部分,因此它似乎沒有更新。
我在下面包括了XAML以及屏幕快照,該屏幕快照顯示了ComboBox Text顯示與ComboBox下拉菜單的內容不同步。
部分XAML:
<ComboBox x:Name="_comboBoxLanes" Height="26"
ItemsSource="{Binding SensorConfiguration.LaneConfigurations}"
SelectedItem="{Binding Path=SelectedLaneConfiguration}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding DisplayID, Mode=OneWay}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
一些隱藏的代碼:
public partial class LaneManagement : INotifyPropertyChanged, IDisposable
{
..
..
public event PropertyChangedEventHandler PropertyChanged;
private void FirePropertyChanged(string prop)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
private void SensorConfiguration_Changed()
{
LaneTools.ResetLanePolygons();
GenerateLaneTypeDropdowns();
FirePropertyChanged("SensorConfiguration");
FirePropertyChanged("SelectedLaneConfiguration");
FirePropertyChanged("DisplayID");
}
}
public class LaneConfiguration : PolygonConfiguration
{
public override string DisplayID
{
get
{
return IsLaneGroup?string.Format("Lanes {0} - {1}", ID, ID + LaneCount - 1): string.Format("Lane {0}", ID);
}
}
}
我創建了一個簡短的示例,然后重新發布並得到了答案 。
我以為我只需要在后面的代碼上使用INotifyPropertyChanged。 實際上,我的數據對象LaneConfiguration類也需要它。 我應該更加關注Ali Adl的評論。 這將使我免於沮喪的一天。
感謝Ali Adl和Tim的有用答案!
正確的方法是使您綁定的屬性-DependencyProperty-自動更新不會有任何問題。
如果您使用INotifyPropertyCahgnge,那么它必須能正常工作,否則不能正常工作-檢查PropertyChanged事件== null。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.