C# 选定的ComboBoxItem图像未更改

C# 选定的ComboBoxItem图像未更改,c#,wpf,xaml,combobox,C#,Wpf,Xaml,Combobox,我有一个绑定到可观察集合的组合框: <ComboBox x:Name="comboMeetingWeek" ItemsSource="{Binding Meetings}" SelectedItem="{Binding Meeting, UpdateSourceTrigger=PropertyChanged}"> <ComboBox.ItemTemplate> <DataTemplate> <Sta

我有一个绑定到
可观察集合的
组合框

<ComboBox x:Name="comboMeetingWeek" ItemsSource="{Binding Meetings}"
    SelectedItem="{Binding Meeting, UpdateSourceTrigger=PropertyChanged}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Image Source="Images/Bell.png" Margin="0,0,5,0"
                       Visibility="{Binding DisplayBellImage, Converter={StaticResource BoolToHiddenConverter}}" Stretch="None"/>
                <TextBlock Text="{Binding DateMeetingAsText}" />
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>
忽略暂时删除特殊事件

以下是两个相关的命令:

_SetSpecialEventCommand = new DelegateCommand<string>(
    (s) =>
    {
        SpecialEventWindow windowEvent = new SpecialEventWindow();
        windowEvent.DataContext = this;
        windowEvent.ShowDialog();
        if (windowEvent.DialogResult.HasValue && windowEvent.DialogResult.Value)
            _Meeting.IsSpecialEvent = true;
    },
    (s) => !_Meeting.IsSpecialEvent);

_EditSpecialEventCommand = new DelegateCommand<string>(
    (s) =>
    {
        SpecialEventWindow windowEvent = new SpecialEventWindow();
        windowEvent.DataContext = this;
        windowEvent.ShowDialog();
        if (windowEvent.DialogResult.HasValue && windowEvent.DialogResult.Value)
            _Meeting.IsSpecialEvent = true;
        else
            _Meeting.IsSpecialEvent = false;
    },
    (s) => _Meeting.IsSpecialEvent);
因此,我的上下文菜单现在总是与当前组合菜单项的状态匹配

但是当我将一个组合项设置为一个事件时,该组合项不会更新并添加图像。我决定将ItemSource设置为也有一个
UpdateTriggerSource=PropertyChanged

然后,我调整了侦听事件处理程序:

private void Meeting_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    OnPropertyChanged(e.PropertyName);

    if (e.PropertyName == "IsSpecialEvent" || e.PropertyName == "IsCircuitVisit")
        OnPropertyChanged("Meetings");
}
但这是行不通的。列表现在显示一个图标,但不是当前项目本身

我错过了哪一步

为了看到它,我必须选择另一个菜单项,然后再回到它

多谢各位

更新 我更改了两个模型属性:

[XmlIgnore]
public bool IsSpecialEvent
{
    get { return _SpecialEvent.Event; }
    set
    {
        _SpecialEvent.Event = value;
        MarkDirty();
        OnPropertyChanged("IsSpecialEvent");
        OnPropertyChanged("DisplayBellImage");
    }
}

[XmlIgnore]
public bool IsCircuitVisit
{
    get { return _SpecialEvent.CircuitVisit; }
    set
    {
        _SpecialEvent.CircuitVisit = value;
        MarkDirty();
        OnPropertyChanged("IsCircuitVisit");
        OnPropertyChanged("DisplayBellImage");
    }
}

他们现在也发射了DisplayBellImage,一切看起来都很好。但是我确实需要像我那样更新ItemSource,对吗?

贝尔图像的可见性似乎是由名为
DisplayBellImage
的属性的值驱动的。我看不到你曾经改变过该属性的值,或者为它提高
PropertyChanged
。您应该调用OnPropertyChanged(“DisplayBellImage”)每次
DisplayBellImage
的值更改时

贝尔图像的可见性似乎是由名为
DisplayBellImage
的属性的值驱动的。我看不到你曾经更改过该属性的值或为其提高
PropertyChanged
。@EdPlunkett NIce one!:)我已经更新了问题。谢谢。你的UI似乎使用了一个主题。从组合框中删除主题,检查是否可以看到图标。我个人的怀疑是你的主题。安德鲁,“一切似乎都很好”,你是说你这里的问题已经解决了吗?@EdPlunkett视图模型正在监听它对源代码所做的更改(讽刺的是)。因此它可以通知视图。听起来我所需要做的就是不去听,只做选择性的onpropertychanged调用。
private void Meeting_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    OnPropertyChanged(e.PropertyName);

    if (e.PropertyName == "IsSpecialEvent" || e.PropertyName == "IsCircuitVisit")
        OnPropertyChanged("Meetings");
}
[XmlIgnore]
public bool IsSpecialEvent
{
    get { return _SpecialEvent.Event; }
    set
    {
        _SpecialEvent.Event = value;
        MarkDirty();
        OnPropertyChanged("IsSpecialEvent");
        OnPropertyChanged("DisplayBellImage");
    }
}

[XmlIgnore]
public bool IsCircuitVisit
{
    get { return _SpecialEvent.CircuitVisit; }
    set
    {
        _SpecialEvent.CircuitVisit = value;
        MarkDirty();
        OnPropertyChanged("IsCircuitVisit");
        OnPropertyChanged("DisplayBellImage");
    }
}