當TreeViewItem屬性IsExpanded發生更改時,是否有方法在XAML中調用函數?wpf TreeView - 如何在IsExpanded屬性更改上調用函數
我相信不太好的替代方法是循環遍歷所有TreeViewItems並執行item.IsExpanded + =處理程序調用,如果我理解正確的話。
或者我可以檢查點擊膨脹元素我猜。
我在做什麼是堅持樹的展開/崩潰狀態。請在回答第一個問題之前建議替代方法來堅持這只是爲了在屬性和xaml上引導我。
當TreeViewItem屬性IsExpanded發生更改時,是否有方法在XAML中調用函數?wpf TreeView - 如何在IsExpanded屬性更改上調用函數
我相信不太好的替代方法是循環遍歷所有TreeViewItems並執行item.IsExpanded + =處理程序調用,如果我理解正確的話。
或者我可以檢查點擊膨脹元素我猜。
我在做什麼是堅持樹的展開/崩潰狀態。請在回答第一個問題之前建議替代方法來堅持這只是爲了在屬性和xaml上引導我。
我會使用類似的樹型視圖的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.
}
}
大廈喬爾的回答,您可以在樹型視圖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的所有父項中獲取事件。
這對我不起作用,因爲我需要執行代碼時發生變化。但是,這是一個很好的解決方案。 – Mark
然後,只需在ViewModel中放置一組IsExpanded。公共布爾IsExpanded {得到{返回_IsExpanded; } set {_IsExpanded = value; CallSomeOtherFunc(); }}當然,我省略了INotifyPropertyChanged的代碼。 –
這正是我要做的。不需要代碼。如果你使用像caliburn.micro這樣的東西,一切都會容易得多。 –