2013-08-07 175 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