[英]WPF: Binding Outside the ListView's ObservableCollection
在WPF中,我有一個ListView,其ItemSource綁定到ObservableCollection:
<ListView ItemsSource="{Binding Path=TestList, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}">
TestList是TestCase類型的集合,它具有多個成員。 這對於用TestList成員的信息填充ListView列非常有用,但是我還需要從集合外部訪問屬性。
有一個ComboBox(在ListView之外),用於更改某些列中顯示的控件。 我試圖通過在Visibility屬性上設置DataTrigger來做到這一點:
<GridViewColumn Header="Area" Width="100">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Area}">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Style.Setters>
<Setter Property="Visibility" Value="Visible"/>
</Style.Setters>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IdentitySelection}" Value="Test Management">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
我還有其他一些地方需要從TestList外部進行綁定(例如在CellTemplates中填充ComboBox)。 但是,ListView似乎沒有從ItemSource之外的任何事物獲取數據。
我嘗試將TestList和IdentitySelection移到一個類(TestManager)中,將其聲明為一個大屬性,並綁定到該類:
<ListView ItemsSource="{Binding Path=TestManager, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}">
<ListView.View>
<GridView>
<GridViewColumn Header="Area" Width="100">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=TestList.Area}">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Style.Setters>
<Setter Property="Visibility" Value="Visible"/>
</Style.Setters>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IdentitySelection}" Value="Test Management">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
那也沒有用。 關於數據上下文,我是否需要更改? 我覺得一定有辦法做到這一點。 任何想法都將不勝感激。
一旦進入DataTemplate
, DataContext
就會切換到綁定的項目。 沒有繞過它。
但是 ,您還可以執行其他綁定。 例如,如果您需要脫離主數據上下文,則可以執行以下操作:
"{Binding ElementName=Root, Path=DataContext.MyProperty}"
請注意,您的窗口或根元素需要x:Name="Root"
才能正常工作。 您仍然仍然可以通過StaticResource
綁定訪問資源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.