温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - make WPF combobox with checkbox user control with generic class
wpf user-controls

其他 - 使用通用类使带有复选框用户控件的WPF组合框

发布于 2020-04-04 00:42:15

我发现很多的解决方案,但我有约束力的通用挣扎classuser-control及在ViewModel。我想使ComboBoxcheckboxComboBox将使用通用,class因此我可以user-control在整个应用程序中重用它

我的问题是:如何将此泛型class与我的实际View.xaml文件绑定ComboBox

这个是我的 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;
    }
  }
}

查看更多

提问者
Harmi
被浏览
68
Dean Chalk 2020-02-01 01:14

您的绑定都错了,应该看起来像这样:

    <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>