ComboBoxでバインディングアップデートの問題が発生しています。私のComboBoxのItemSourceは、LaneConfigurationsのリストにバインドされています。ComboBoxのSelectedItemは、コードビハインドのSelectedLaneConfigurationプロパティにバインドされています。各LaneConfigurationの「DisplayID」プロパティを表示するようにComboBoxのItemTemplateを構成しました。
これはほとんどの場合機能します。ただし、レーン構成を変更すると、DisplayIDが変更される可能性があります。特定のレーンを選択し、そのDisplayIDがComboBoxの「Text」として表示されている場合、LaneConfigurationオブジェクトを変更すると、ComboBoxの「Text」部分は表示されるはずの新しい「DisplayID」で更新されません。 。ComboBoxのドロップダウン矢印をクリックすると、リストで選択されたアイテムとして表示されるアイテムに正しいDisplayIDが表示されますが、ComboBoxの上部に表示されている'DisplayID'と一致しません。 ' 分野。
コードビハインドでは、「SelectedLaneConfiguration」プロパティでPropertyChangedイベントを発生させています。'DisplayID'プロパティを更新する必要があることをComboBoxに認識させるにはどうすればよいですか?'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);
}
}
}