AFAIK 冒泡意味著如果在孩子身上觸發了一個事件,同樣的事件也會在父母身上觸發。
我有這段代碼:
<ListView Name="lvFiles" SelectedItem="{Binding SelectedTabFilePath, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding Path=SelectedItem.Files,ElementName=trvFiles, Mode=OneWay}">
<ListView.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Path=Name}"
Command="{Binding DataContext.OpenFileFromTreeView,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}}"
CommandParameter="{Binding DataContext,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}}"
Background="Transparent"
BorderBrush="Transparent"
>
</Button>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
問題是如果我點擊按鈕,屬性SelectedTabFilePathfromSelectedItem將不會被資料填充(因為我沒有點擊 的專案ListView)。
所以,我的問題是:有什么方法可以觸發Click按鈕事件和按鈕事件ListView?
或者,如果不是,當我單擊該按鈕時,設定SelectedTabFilePathfrom屬性的方法是什么?SelectedItem
uj5u.com熱心網友回復:
Click事件確實是冒泡的,這意味著它將沿著可視樹的元素向上路由,直到到達根元素。但是,它Button本身會處理 event,因為它的Command屬性是系結的。這意味著它的父元素,包括ListViewItem(專案容器)將忽略該事件,因此不會選擇專案。
Button有一種解決方法是使用在單擊時接收鍵盤焦點這一事實。您可以添加一個帶有觸發器的專案容器樣式,該觸發器在鍵盤焦點位于其中時設定IsSelected屬性ListViewItem,由IsKeyboardFocusWithin屬性表示。
<ListView ...>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="IsSelected" Value="True"/>
</Trigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
<!-- ...your other markup. -->
</ListView>
uj5u.com熱心網友回復:
如何使用 MVVM 處理 WPF 串列框 selectionchanged 事件
我認為當串列框選擇更改時,您可以使用互動來觸發相同的命令(OpenFileFromTreeView)。
uj5u.com熱心網友回復:
代替:
AncestorType={x:Type ListView}
如果你嘗試:
AncestorType={x:Type ListViewItem}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/444810.html
