使用通用 class 制作带有复选框用户控件的 WPF 组合框

make WPF combobox with checkbox user control with generic class

我找到了很多解决方案,但我正在努力将通用 classuser-controlViewModel 绑定在一起。我想使 ComboBoxcheckbox .此 ComboBox 将使用通用 class 因此我可以在整个应用程序中重用此 user-control

我的问题是:如何将此通用 classComboBox 的实际 View.xaml 文件绑定。

这个是我的user-control

<base:CheckedComboBox>
    <ComboBox.Resources>
        <Style TargetType="ComboBoxItem">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ComboBoxItem">
                        <base:BaseCheckBox HorizontalAlignment="Center" Content="{Binding FilterDropDownItemModel.Title}" ToolTip="{Binding FilterDropDownItemModel.ToolTip}" IsChecked="{Binding FilterDropDownItemModel.IsSelected,UpdateSourceTrigger=PropertyChanged}">
                        </base:BaseCheckBox>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ComboBox.Resources>

</base:CheckedComboBox>

这是我的通用 class 模型

public abstract class DropDownModel<T> : BaseModel
{
    private T _mysummary;
    public T MySummary
    {
        get { return _mysummary; }
        set
        {
            _mysummary = value;
            RaisePropertyChanged();
        }
    }

    private bool _isSelected;
    public bool IsSelected
    {
        get { return _isSelected; }
        set
        {
            if (_isSelected != value)
            {
                _isSelected = value;
                RaisePropertyChanged();
            }
        }
    }

    /// <summary>
    /// Title
    /// </summary>
    public abstract string Title
    {
        get;
    }

    public abstract string ToolTip
    {
        get;
    }
  }
}

你的绑定全错了,它应该看起来像这样:

    <Style TargetType="ComboBoxItem">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ComboBoxItem">
                    <base:BaseCheckBox HorizontalAlignment="Center" 
                                       Content="{Binding RelativeSource={RelativeSource Mode=Self}, Path=DataContext.FilterDropDownItemModel.Title}" ToolTip="{Binding RelativeSource={RelativeSource Mode=Self}, Path=DataContext.FilterDropDownItemModel.ToolTip}" IsChecked="{Binding RelativeSource={RelativeSource Mode=Self}, Path=DataContext.FilterDropDownItemModel.IsSelected}">
                </base:BaseCheckBox>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>