2 回答

TA貢獻1847條經(jīng)驗 獲得超11個贊
好吧,我通過走不同的路線解決了這個問題。我不是MouseDown在文本塊上掛鉤事件,而是SelectedItemChanged在樹視圖上掛鉤事件。
<TreeView
ItemsSource="{Binding GTOs}"
SelectedItemChanged="TreeView_SelectedItemChanged">
在RoutedPropertyChangedEventArgs該的SelectedItemChanged事件包含視圖模型的特定TreeViewItem,其產(chǎn)生的導航Uri屬性我需要(我以前綁定這個屬性到文本框的標簽屬性)。
新的事件處理程序如下所示:
private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
dynamic viewModel = e.NewValue;
var uri = viewModel.Uri;
(DataContext as TreeViewModel).Navigate(uri);
}
樹的每一層都包含不同的 ViewModel 類型,但它們都有一個 Uri 屬性,因此dynamic綁定提供了所需的“不關心它是什么類型”的行為。
我現(xiàn)在可以從 TextBlock 中刪除Tag綁定和MouseDown事件。
<HierarchicalDataTemplate DataType="{x:Type local:TreeGTOViewModel}" ItemsSource="{Binding Children}">
<TextBlock
Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type TreeView}}, Path=ActualWidth}"
Text="{Binding Title}" />
并且樹視圖項目現(xiàn)在可以正確響應,無論單擊何處。
- 2 回答
- 0 關注
- 174 瀏覽
添加回答
舉報