2013-08-07 179 views
1

我有几个复选框(其中8个)其中一个用于启用/禁用其他7个复选框。silverlight:复选框选中/未选中复选框已选中/未选中

为我写的,

IsEnabled="{Binding ElementName=ControlchkEnable, Path=IsChecked, Mode=OneWay}" 
IsChecked="{Binding ElementName=ControlchkEnable, Path=IsChecked, Mode=OneWay}" 
在每一个相关的CB的

。 现在启用/禁用工作正常, ,但如果主复选框未选中,则其他复选框的没有得到检查,他们只是被禁用。

任何想法出了什么问题?

+0

你有没有试图改变TwoWay的模式? – MichaelS

+0

我不想在取决于CheckBox的状态下更改Master CheckBox的状态,这就是Mode被更改为TwoWay的情况。 – Sujoy

+0

你有没有尝试删除IsEnabled绑定,看看会发生什么? – noaRAVE

回答

1

当复选框被禁用时,您不能更改值。

要做到这一点在MVVM,你必须禁用之前更改值主复选框:

C#

/// <summary> 
/// Bind to IsChecked of "ControlchkEnable" element (TwoWay) 
/// and bind to IsEnabled of each of other 7 checkbox's (OneWay) 
/// </summary> 
public bool ControlchkEnable 
{ 
    get { return _controlchkEnable; } 
    set 
    { 
     if (value == _controlchkEnable) return; 
     _controlchkEnable = value; 
     // Before informing the checkboxes are disabled, 
     // pass their values ​​to uncheck 
     if (!_controlchkEnable) 
     { 
      Check1 = false; 
      // Check2 = false; 
      // Check...= false; 
     } 
     // Raise UI that value changed 
     RaisePropertyChanged("ControlchkEnable"); 
    } 
} 
private bool _controlchkEnable; 

/// <summary> 
/// Bind to IsChecked of one of other 7 checkbox's (TwoWay) 
/// </summary> 
public bool Check1 
{ 
    get { return _check1; } 
    set 
    { 
     if (value == _check1) return; 
     _check1 = value; 
     RaisePropertyChanged("Check1"); 
    } 
} 
private bool _check1; 

XAML中:

<!-- Main checkbox --> 
IsChecked="{Binding ControlchkEnable, Mode=TwoWay}" 

<!-- Other checkbox's --> 
IsEnabled="{Binding ControlchkEnable, Mode=OneWay}" 
IsChecked="{Binding Check1, Mode=TwoWay}" 
+0

这就是我正在尝试的。非常感谢。 一个小修改: 在** Setter ** ** Check1 **我们需要放 '_check1 = value;'代替'_controlchkEnable = value;' – Sujoy

+0

您说得对,我犯了一个错误“复制并粘贴“......谢谢:) – Tonio