我的ComboBox存在绑定更新问题。我的ComboBox的ItemSource绑定到LaneConfigurations列表。 ComboBox的SelectedItem绑定到我的代码隐藏中的SelectedLaneConfiguration属性。我配置了ComboBox的ItemTemplate以显示每个LaneConfiguration的'DisplayID'属性。
大部分时间都可以使用。但是,更改通道配置可能会导致DisplayID发生变化。如果您选择了特定的通道并且它的DisplayID显示为ComboBox的“文本”,然后您更改了LaneConfiguration对象,则ComboBox的“Text”部分不会使用应显示的新“DisplayID”进行更新。当我单击ComboBox上的下拉箭头时,显示为列表中所选项目的项目显示正确的DisplayID,但这与其中“ComboBox”顶部显示的“DisplayID”不匹配。 'field。
在我的代码中,我在'SelectedLaneConfiguration'属性上触发了一个PropertyChanged事件。如何让ComboBox意识到'DisplayID'属性需要更新?我试图为'DisplayID'属性触发一个PropertyChanged事件,但它是LaneConfiguration类的一部分,所以它似乎没有更新。
我在下面包含了XAML以及显示ComboBox文本显示与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);
}
}
}
答案 0 :(得分:0)
我创建了一个较短的例子并重新发布并获得answer。
我以为我只需要在代码隐藏中使用INotifyPropertyChanged。我实际上也需要它在我的数据对象LaneConfiguration类中。我应该更加关注Ali Adl的评论。这本来可以让我感到沮丧。
感谢Ali Adl和Tim提供的有用答案!!
答案 1 :(得分:0)
正确的方法是创建绑定的属性 - DependencyProperty - 而不是自动更新没有任何问题。
如果你使用INotifyPropertyCahgnge而不是它必须工作,如果没有 - 检查PropertyChanged event == null。