2016-03-23 59 views
0

是有幕後黑手給下面的代碼以任何方式,在「檢查」事件火,拿在當前代碼「MyClass的」元素:如何獲得當前元素的複選框,在WPF

<TreeView Name="TreeViewName"> 
      <TreeView.Resources > 
       <HierarchicalDataTemplate DataType="{x:Type local:MyClass}" ItemsSource="{Binding Children}"> 
        <StackPanel Orientation="Horizontal"> 
         <CheckBox IsChecked="{Binding Checked}" VerticalAlignment="Center" Checked="OnExplorerCheck" ></CheckBox> 
         <Image Source="{Binding Icon}" Height="15" Margin="5,0,0,0"></Image> 
         <Label Content="{Binding Name}"></Label> 
        </StackPanel> 
       </HierarchicalDataTemplate> 
      </TreeView.Resources> 
     </TreeView> 

我d希望能夠在檢查複選框時獲取樹視圖當前元素的所有數據。請注意,「MyClass」可以具有任何數量的屬性,我希望能夠訪問它們。有什麼辦法可以做到這一點?

回答

1

我建議堅持使用MVVM方法,並處理項目ViewModel中已檢查狀態的變化,但是在代碼中,可以通過路由事件實現您想要的功能。

在你的TreeView訂閱CheckBox.Checked路由事件:

<TreeView Name="TreeViewName" CheckBox.Checked="TreeViewName_Checked"> 

在你後面的代碼可以達到相應的複選框爲OriginalSource場,並獲得其的DataContext,這將是MyClass的一個實例:

private void TreeViewName_Checked(object sender, RoutedEventArgs e) 
    { 
     var checkBox = e.OriginalSource as CheckBox; 

     MyClass dataContext = checkBox?.DataContext as MyClass; 

     if (dataContext != null) 
     { 
      // Do something with MyClass instance 
     } 
    } 
+1

謝謝陌生的人!我以另一種方式走了,而且這樣做,但這將在未來做得很好! –