簡體   English   中英

當基礎ComboBox項目描述更改時,綁定不會在ComboBox文本字段中更新

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

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