使用通用 class 制作带有复选框用户控件的 WPF 组合框
make WPF combobox with checkbox user control with generic class
我找到了很多解决方案,但我正在努力将通用 class
与 user-control
和 ViewModel
绑定在一起。我想使 ComboBox
与 checkbox
.此 ComboBox
将使用通用 class
因此我可以在整个应用程序中重用此 user-control
。
我的问题是:如何将此通用 class
与 ComboBox
的实际 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>
我找到了很多解决方案,但我正在努力将通用 class
与 user-control
和 ViewModel
绑定在一起。我想使 ComboBox
与 checkbox
.此 ComboBox
将使用通用 class
因此我可以在整个应用程序中重用此 user-control
。
我的问题是:如何将此通用 class
与 ComboBox
的实际 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>