对象的引用更改后通知 UI

Notifying UI once the reference of an Object is changed

我正在尝试将对象内部的部件列表中的选定部件绑定为 ObservableCollection。

<UserControl.DataContext>
        <MultiBinding Converter="{StaticResource getPartConverter}">
            <Binding Path="PartType" ElementName="PartDisplayUserControl"/>
            <Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=local:MainWindow}" Path="ViewModelForParts"/>
        </MultiBinding>
</UserControl.DataContext>

一旦 PartList (ObservableCollection) 发生变化,它就不会触发转换器 (getPartConverter)。但是一旦 PartType 发生变化,它就会触发转换器并找到正确的部分。更改零件列表后如何触发转换器?

ViewModelForParts 的代码如下:

public class PartConfiguratorViewModel : PropertyChangedViewModelBase
    {
        private ObservableCollection<PartData> partList;
        public ObservableCollection<PartData> PartList 
        { 
            get => partList;
            set => SetField(ref partList, value); 
        }

        public PartConfiguratorViewModel()
        {
            PartList = new ObservableCollection<PartData>();
        }
    }

注意:setField 命令具有 属性 更改事件。此外,PartData 对象中的所有属性也具有相同的事件。

您应该绑定到一个 属性,它在集合更新时实际设置,例如 Count 属性:

<Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=local:MainWindow}"
    Path="ViewModelForParts.Count"/>

绑定到集合 属性 本身只会在您将 PartList 属性 设置为另一个集合时触发转换器(这违背了使用 ObservableCollection<T> 的目的在另一种不引发 INotifyCollectionChanged 事件的集合上)