我发现很多的解决方案,但我有约束力的通用挣扎class
与user-control
及在ViewModel
。我想使ComboBox
用checkbox
。这ComboBox
将使用通用,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;
}
}
}
您的绑定都错了,应该看起来像这样:
<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>
与
RelativeSource={RelativeSource Self}
和绑定Path=DataContext.SomeProperty
完全等同于无需显式设置source和just的绑定Path=SomeProperty
。因此绑定实际上一切正常。不知道是什么使您认为应该显式设置绑定源。@Clemens-这是一个控制模板,因此您需要relativesource绑定
一点也不。是什么让你这么想的?