2014-04-22 28 views
0

我想知道是否可以從WPF中檢查的更改事件獲取Item源項目?從Checked更改事件(RoutedEventArgs)獲取項目WPF

XAML

   <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <CheckBox IsChecked="{Binding Active, Mode=TwoWay}" Checked="CheckBox_Checked" HorizontalAlignment="Center"></CheckBox> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 

樣品C#(對正確答案的線。我希望)

 private void CheckBox_Checked(object sender, RoutedEventArgs e) 
    { 

     **// Its not e.source, most events it's e.item...but the checked event doesn't use this..** 

     Customer c = e.Source as Customer; 



     if(c != null) 
     ..... 
    } 

感謝

+0

你想要什麼? [UI不是數據](http://stackoverflow.com/a/14382137/643085)。如果你的複選框已經綁定到一個底層對象,爲什麼不只是聽取底層對象的屬性更改呢?你想做什麼? –

+0

因爲底層對象來自ObservableCollection,所以我想要聽取各個屬性事件,即當選中活動複選框時,集合將不允許(容易)但我也需要行數據以及 – user3428422

+0

UI不是放置您需要的任何業務邏輯的正確位置。您可以監聽數據項中的「PropertyChanged」事件,也可以將您的邏輯放入代理中,並在「Active」屬性的setter中調用它。或者使用類似[[Selectable '](http://stackoverflow.com/a/14971905/643085))的方法。 –

回答

0

事情是這樣的,假設你沒有關注MVVM

private void CheckBox_Checked(object sender, RoutedEventArgs e) 
    { 
     bool IsActive = (sender as CheckBox).IsChecked; 
     if(IsActive) 
     { 
     Active; 
     } 
    } 
+0

我正在關注MVVM,但我意識到獲取ViewModel中的ObservableCollection中的單個屬性並不容易,並且需要很多代碼才能完成我所需的操作。所以這是一個快速(但凌亂的替代品)將看看 – user3428422

0

,如果你想獲得的EventArgs在MVVM,你可以不喜歡它Refernece

Reference 2

視圖模型

private bool _isactive; 

    public bool IsActive 
    { 
     get { return _isactive; } 
     set 
     { 
      _isactive = value; 
      RaisePropertyChanged(() => IsActive); 
     } 
    } 

。使用繼電器的命令或ICommand的

XAML

<CheckBox x:Name="chkbox" Command="{Binding CommandName}" 
         CommandParameter="{parameter}"/> 

處理命令做必要的行動。

+0

這個語法是有道理的,我想怎麼做,但屬性_isactive不會是當前的DataContext的一部分。所以基本上,不是集合的一部分。所以要做到上述,我需要使用RelativeSource我猜? – user3428422

+0

如果源綁定不是當前數據上下文的一部分,則使用相對源。嘗試參考將有所幫助。或發佈更多的代碼,我會幫助你以我的方式 – Eldho