Wpf 无法在复选框中设置所选项目的初始状态

Wpf 无法在复选框中设置所选项目的初始状态,wpf,xceed,wpf-extended-toolkit,Wpf,Xceed,Wpf Extended Toolkit,我正在尝试使用Xceed CheckComboBox,除了一个小问题外,它运行良好。最初加载CheckComboBox时,选中的项目列表将正确显示在CheckComboBox的ToggleButton部分,但表示这些项目的复选框不会被选中。这是我正在使用的代码 XAML <xctk:CheckComboBox x:Name="_combo" Grid.Row="2" Grid.Column="1" ItemsSource="{Binding RoomF

我正在尝试使用Xceed CheckComboBox,除了一个小问题外,它运行良好。最初加载CheckComboBox时,选中的项目列表将正确显示在CheckComboBox的ToggleButton部分,但表示这些项目的复选框不会被选中。这是我正在使用的代码

XAML

<xctk:CheckComboBox x:Name="_combo"  Grid.Row="2" Grid.Column="1" 
                 ItemsSource="{Binding RoomFacilities}" 
                 HorizontalAlignment="Center" 
                 VerticalAlignment="Center"
                 DisplayMemberPath="FacilityName" 
                 SelectedItemsOverride="{Binding SelectedFaclities}" 
                    />

查看模型

public class RoomBandUpdateViewModel : Screen, IHandle<RecordChanged<RoomFacility>>,
                                               IHandle<RecordDeleted<RoomFacility>> {
    private ObservableCollection<RoomFacility> _roomFacilities;
    public ObservableCollection<RoomFacility> RoomFacilities {
        get { return _roomFacilities; }
        set { _roomFacilities = value; NotifyOfPropertyChange(() => RoomFacilities); }
    }

    private ObservableCollection<RoomFacility> _selectedFacilities;
    public ObservableCollection<RoomFacility> SelectedFaclities {
        get { return _selectedFacilities; }
        set { _selectedFacilities = value; NotifyOfPropertyChange(() => SelectedFaclities); }
    }

    protected override void OnActivate() {
        SelectedFaclities = new ObservableCollection<RoomFacility>(RoomBand.Facilities);
        RoomFacilities = new ObservableCollection<RoomFacility>(facilityService.GetAll());
    }
}
public class RoomBand更新设备模型:屏幕,IHandle,
我处理{
私人可观察收集室设施;
公共可观测收集室设施{
获取{return\u roomFacilities;}
设置{u roomFacilities=value;NotifyOfPropertyChange(()=>roomFacilities);}
}
私人可观测采集设施;
公共可观测集合选定工厂{
获取{return\u selectedFacilities;}
设置{u selectedFacilities=value;NotifyOfPropertyChange(()=>selectedFacilities);}
}
受保护的覆盖无效OnActivate(){
SelectedFacilities=新的可观测集合(RoomBand.Facilities);
RoomFacilities=新的ObservableCollection(facilityService.GetAll());
}
}

我想知道为什么在视图模型中正确设置了SelectedFacility时,不会根据SelectedFacility中的项目选中复选框的复选框。有趣的是,CheckComboBox的切换按钮部分在逗号分隔的列表中正确地显示了SelectedFacilities。

如果将集合实例化到类的构造函数中,则该属性尚未绑定到组件,因此,组件不会触发ViewModel的PropertyChanged事件

observable collection Add()方法没有激发PropertyChanged事件,而是激发CollectionChanged事件


希望这对您有所帮助

目前尚不清楚您如何填写
selectedfacility
roomfacility
。确保已正确处理
RoomFacility
的引用相等。换句话说,我只能重现问题的唯一方法是在以下模式中填充
ObservableCollection
s:

RoomFacilities m1 = new RoomFacilities() { FacilityName = "F1" };
RoomFacilities m2 = new RoomFacilities() { FacilityName = "F2" };
RoomFacilities m3 = new RoomFacilities() { FacilityName = "F3" };
RoomFacilities m4 = new RoomFacilities() { FacilityName = "F1"};
RoomFacilities m5 = new RoomFacilities() { FacilityName = "F2"};
RoomFacilities = new ObservableCollection<RoomFacilities>(new Collection<RoomFacilities>() { m1, m2, m3 });
        SelectedFacilities = new ObservableCollection<RoomFacilities>(new Collection<RoomFacilities>() { m4, m5 });

换句话说,
如果
SelectedItemsOverride
不是
项目源的子集,那么
复选框
不会引发异常

您解决过这个问题吗?我也有同样的问题
public override bool Equals(object obj)
{
    if (obj is RoomFacilities)
    {
        RoomFacilities mod = (RoomFacilities)obj;
        if (mod.FacilityName == this.FacilityName)
            return true;
        else
            return false;
    }
    return base.Equals(obj);
}
public override int GetHashCode()
{
    return FacilityName.GetHashCode();
}