2012-03-13 58 views
1

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

我创建了一组绑定到对象集合的复选框。我有第二个对象集合,它是第一个对象的子集。我想复选框的porperty器isChecked绑定到确定对象包含在第二列表或不

编辑方法:

<ListBox Height="auto" HorizontalAlignment="Stretch" Name="listBox" VerticalAlignment="Stretch" Width="auto" ItemsSource="{Binding DataSources}"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <CheckBox Name="CheckBoxZone" 
           Content="{Binding Name}" 
           Tag="{Binding Id}" 
           Margin="0,5,0,0" 

           /> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
+0

如果您不是MVVMing它,然后使用[Checked event。](http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.togglebutton.checked.aspx) – Will 2012-03-13 21:13:40

+0

我在中间有一个ViewModel类。我的计划是使用Checked事件修改数据库中的数据。我无法弄清楚如何相应地检查项目。 – Omar 2012-03-13 21:18:46

+0

您是否可以在DataTemplate中的CheckBox中访问第二个(子集)集合? – Clemens 2012-03-13 21:33:53

回答

3

您可以将复选框命令属性绑定到ICommand模型。这意味着每次更改检查命令都会被调用。

实施例:

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

您可以通过MultiBinding的手段结合结合IsChecked到两个数据对象和所述子集集合与multi-value converter其转换成bool(或Nullable<bool>IsChecked)值:

<CheckBox.IsChecked> 
    <MultiBinding Converter="{StaticResource ObjectInListConverter}" Mode="OneWay"> 
     <Binding /> 
     <Binding Source="{StaticResource SubsetCollection}" /> 
    </MultiBinding> 
</CheckBox.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(); 
    } 
} 
+0

谢谢。我会将ObjectInListConverter定义为Window.Resource?确切地说, – Omar 2012-03-13 22:07:54

+1

。请注意,您必须在MultiBinding上设置“Mode =”OneWay“”。 – Clemens 2012-03-13 22:16:10

+0

我如何将我的子集列表实际定义为Window.Resource(StaticResource)? – Omar 2012-03-13 23:13:11

1

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

相关问题