[英]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.