2013-05-14 134 views
0

繼傳遞多個參數是我的XAML:WPF上點擊複選框

<CheckBox Name="CheckBoxNoFindings" Content="No Findings" Command="{Binding DisableRteCommand}" CommandParameter="{Binding Path=Content}" Grid.Row="1" Grid.Column="1" Margin="2,5,0,3" /> 

我想通過這兩個IsCheckedContent屬性值的命令參數並訪問那些來自VM。

VM代碼:

private void DisableRte(object args) 
{ 
    if (null != args) 
    { 
     string rteName = args.ToString(); 
    } 
} 

實際要求,對檢查chekbox,一個文本框,應禁用和複選框的內容應施入texbox的文本。另一方面,在取消選中複選框文本框應啓用和文本應該是空的。

任何解決方案?

+0

有辦法做到這一點,然而它仍然是更常見的,你的視圖模型綁定到屬性。在你的情況下,你可以有3個字符串(你的內容)和3個布爾值(你的IsChecked)下面是使用多個命令參數的一個例子:http://stackoverflow.com/questions/1350598/passing-two-command-parameters-using- a-wpf-binding – Thelonias 2013-05-14 12:36:39

回答

2

嗯,你想要做的方式,對我來說似乎有點奇怪。你爲什麼不在虛擬機中以「簡單的方式」實現它?例如。

public class CheckBoxExampleVm : ViewModelBase //assuming you have such a base class 
{ 
    private bool? _isChecked; 
    public bool? IsChecked 
    { 
     get { return _isChecked; } 
     set 
     { 
      _isChecked = value; 
      ModifyTextValue(value); 
      RaisePropertyChanged("IsChecked"); 
     } 
    } 

    private string _textValue; 
    public string TextValue 
    { 
     get { return _textValue; } 
     set 
     { 
      _textValue = value; 
      RaisePropertyChanged("TextValue"); 
     } 
    } 

    private void ModifyTextValue(bool? condition) 
    { 
     // do what ever you want with the text value 
    } 
} 

現在你只需要設置綁定,一切都很好。

另一種選擇是使用轉換器和元素綁定,這樣就不必在虛擬機本身中實現它。

+0

這裏,問題是我每個複選框都有03複選框和03文本框,所以我試圖在所有複選框上使用一個常用命令來實現此目的。這就是爲什麼我需要傳遞內容。 – 2013-05-14 12:30:29

+0

那麼你可以考慮使用'ListView',這樣你就可以綁定到一個'CheckBoxExampleVm'集合。您可以在項目模板中聲明合成。該命令可以在上級虛擬機中執行,並與當前的「SelectedItem」一起工作。我的建議仍然有效。 - 你也可以考慮創建一個'UserControl'來重用這個組合。但我更喜歡第一個解決方案。 – DHN 2013-05-14 12:38:34

+0

再次思考。如果你用'ListView'實現它,你甚至不需要這個命令。 'CheckBoxExampleVm'會自動執行。 – DHN 2013-05-14 12:45:30

0

如果其他建議不適用於您,您可以將整個CheckBox傳遞給虛擬機。

<CheckBox ... CommandParameter="{Binding RelativeSource={RelativeSource Self}}"/> 
+2

是的,一個解決方案,但一個醜陋的。它完全打破了MVVM模式。 **虛擬機實現不應該包含任何引用來查看相關組件,如控件或視圖**。 – DHN 2013-05-14 14:26:44

+0

@DHN我完全同意,但有時需要實施快速的'n'髒修復,比如沒有時間重構別人的代碼。 – Murkaeus 2013-05-14 15:46:06

+0

嗯,只有當你想有一個扔掉的結果。 ; o)如果您正在進行具有其生命週期等的真正的軟件開發,那麼一定要避免這樣的解決方案。但因爲我們不知道背景a.s.o.這都是猜測。 :o) – DHN 2013-05-14 16:01:25