Wpf 将复选框绑定到方法

Wpf 将复选框绑定到方法,wpf,Wpf,是否可以将复选框的IsChecked属性绑定到自定义方法 我创建了一个绑定到对象集合的复选框列表。我有第二个对象集合,它是第一个对象的子集。我想将复选框的IsChecked属性绑定到一个确定对象是否包含在第二个列表中的方法 编辑: 您可以将checkbox命令属性绑定到模型上的ICommand。这意味着每次更改检查时,都会调用该命令 例如: <CheckBox Name="CheckBoxZone" Content="{Binding

是否可以将复选框的IsChecked属性绑定到自定义方法

我创建了一个绑定到对象集合的复选框列表。我有第二个对象集合,它是第一个对象的子集。我想将复选框的IsChecked属性绑定到一个确定对象是否包含在第二个列表中的方法

编辑:


您可以将checkbox命令属性绑定到模型上的ICommand。这意味着每次更改检查时,都会调用该命令

例如:

<CheckBox Name="CheckBoxZone" 
                          Content="{Binding Name}" 
                          Tag="{Binding Id}"  
                          Margin="0,5,0,0"
                          Command={Binding CheckBoxChangedCommand}  
                          />

您可以将checkbox命令属性绑定到模型上的ICommand。这意味着每次更改检查时,都会调用该命令

例如:

<CheckBox Name="CheckBoxZone" 
                          Content="{Binding Name}" 
                          Tag="{Binding Id}"  
                          Margin="0,5,0,0"
                          Command={Binding CheckBoxChangedCommand}  
                          />

您可以通过与转换为
bool
(或
IsChecked
null
)值的结合将
IsChecked
绑定到数据对象和子集集合:


转换器:

class ObjectInListConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        IList subset = values[1] as IList;
        Nullable<bool> result = subset.Contains(values[0]);
        return result;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
class ObjectInListConverter:IMultiValueConverter
{
公共对象转换(对象[]值,类型targetType,对象参数,CultureInfo区域性)
{
IList子集=值[1]为IList;
可为空的结果=子集.Contains(值[0]);
返回结果;
}
公共对象[]转换回(对象值,类型[]目标类型,对象参数,CultureInfo区域性)
{
抛出新的NotImplementedException();
}
}

您可以通过与转换为
bool
(或
IsChecked
null
)值的结合将
IsChecked
绑定到数据对象和子集集合:


转换器:

class ObjectInListConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        IList subset = values[1] as IList;
        Nullable<bool> result = subset.Contains(values[0]);
        return result;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
class ObjectInListConverter:IMultiValueConverter
{
公共对象转换(对象[]值,类型targetType,对象参数,CultureInfo区域性)
{
IList子集=值[1]为IList;
可为空的结果=子集.Contains(值[0]);
返回结果;
}
公共对象[]转换回(对象值,类型[]目标类型,对象参数,CultureInfo区域性)
{
抛出新的NotImplementedException();
}
}


除了Pop Catalin的答案外,您还需要将IsChecked绑定到VM中的一个属性,并在执行命令时修改该VM属性。

除了Pop Catalin的答案外,您还需要将IsChecked绑定到VM中的一个属性,并在执行命令时修改该VM属性。

如果您没有MVVMing命令,然后在中间使用一个VIEW模型类。我的计划是使用Checked事件修改数据库中的数据。我不知道如何将该项列为相应的已选中项。您的复选框是否位于可以访问第二个(子集)集合的数据模板中?您不能将其转过来吗?如果将对象添加到第二个列表中,而不是在第一个列表中设置bool?我添加了视图的标记。我有另一个对象的子集列表。如果不是MVVMIT,那么在中间使用I有一个VIEW模型类。我的计划是使用Checked事件修改数据库中的数据。我不知道如何将该项列为相应的已选中项。您的复选框是否位于可以访问第二个(子集)集合的数据模板中?您不能将其转过来吗?如果将对象添加到第二个列表中,而不是在第一个列表中设置bool?我添加了视图的标记。我有另一个列表,其中包含一部分对象。谢谢。我会将ObjectInListConverter定义为Window.Resource?完全正确。请注意,您必须在多重绑定上设置
Mode=“OneWay”
。我如何将子集列表定义为Window.Resource(StaticResource)??与资源字典中的任何其他条目(例如ObjectInListConverter)完全相同。您可以从
List
派生一个类,将其称为
MyDataObjectList
,并在资源字典中创建该类型的实例。谢谢。我会将ObjectInListConverter定义为Window.Resource?完全正确。请注意,您必须在多重绑定上设置
Mode=“OneWay”
。我如何将子集列表定义为Window.Resource(StaticResource)??与资源字典中的任何其他条目(例如ObjectInListConverter)完全相同。您可以从
List
派生一个类,将其称为
MyDataObjectList
,并在资源字典中创建该类型的实例。