2013-04-12 52 views
2

當TreeViewItem屬性IsExpanded發生更改時,是否有方法在XAML中調用函數?wpf TreeView - 如何在IsExpanded屬性更改上調用函數

我相信不太好的替代方法是循環遍歷所有TreeViewItems並執行item.IsExpanded + =處理程序調用,如果我理解正確的話。

或者我可以檢查點擊膨脹元素我猜。

我在做什麼是堅持樹的展開/崩潰狀態。請在回答第一個問題之前建議替代方法來堅持這只是爲了在屬性和xaml上引導我。

回答

1

我會使用類似的樹型視圖的IsExpanded屬性綁定到我的模型:

    <TreeView.ItemContainerStyle> 
         <Style TargetType="TreeViewItem"> 
          <Setter Property="IsSelected" Value="{Binding IsSelected}" /> 
          <Setter Property="IsExpanded" Value="{Binding IsExpanded}" /> 
         </Style> 
        </TreeView.ItemContainerStyle> 

然後我就可以直通模式運行,並得到IsExpanded價值和保存。另外,還原時,只需設置IsExpanded屬性即可。

由於需要改變的時候調用其他代碼,實現IsExpanded像這樣:

private bool _IsExpanded; 
public bool IsExpanded 
{ 
    get { return _IsExpanded; } 
    set 
    { 
     if (_IsExpanded == value) return; 
     _IsExpanded = value; 
     NotifyPropertyChanged("IsExpanded");//or however you need to do it 
     CallSomeOtherFunc();//this is the code that you need to be called when changed. 
    } 
} 
+0

這對我不起作用,因爲我需要執行代碼時發生變化。但是,這是一個很好的解決方案。 – Mark

+1

然後,只需在ViewModel中放置一組IsExpanded。公共布爾IsExpanded {得到{返回_IsExpanded; } set {_IsExpanded = value; CallSomeOtherFunc(); }}當然,我省略了INotifyPropertyChanged的代碼。 –

+0

這正是我要做的。不需要代碼。如果你使用像caliburn.micro這樣的東西,一切都會容易得多。 –

1

大廈喬爾的回答,您可以在樹型視圖Style這是指事件處理程序在你的代碼隱藏使用EventSetter小號:

<TreeView ... > 
    <TreeView.ItemContainerStyle> 
     <Style TargetType="TreeViewItem" > 
      <EventSetter Event="TreeViewItem.Expanded" Handler="OnTreeExpanded" /> 
      <EventSetter Event="TreeViewItem.Collapsed" Handler="OnTreeCollapsed" /> 
     </Style> 
    </TreeView.ItemContainerStyle> 
    ... 

代碼隱藏 - 正常的事件處理程序:

​​

注意:請確保在事件處理程序中設置了e.Handled = true,否則您將從當前TreeViewItem的所有父項中獲取事件。

相關問題