在 WPF 中,我有一个 ListView,其 ItemSource 绑定(bind)到 ObservableCollection:
<ListView ItemsSource="{Binding Path=TestList, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}">
TestList是TestCase类型的集合,它有多个成员。这非常适合使用 TestList 成员中的信息填充 ListView 列,但我还需要从集合外部访问属性。
有一个组合框(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 的绑定(bind)(例如在 CellTemplates 中填充 ComboBox)。但是,ListView 似乎没有从 ItemSource 之外的任何内容获取数据。
我尝试将 TestList 和 IdentitySelection 移动到一个类 (TestManager) 中,将其声明为一个大属性,并绑定(bind)到它:
<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
会切换到绑定(bind)项。没有办法绕过它。
但是,您还可以执行其他绑定(bind)。例如,如果您需要主数据上下文之外的某些内容,您可以执行以下操作:
"{Binding ElementName=Root, Path=DataContext.MyProperty}"
请注意,您的窗口或根元素需要 x:Name="Root"
才能正常工作。您仍然可以通过 StaticResource
绑定(bind)获取资源。
关于c# - WPF:在 ListView 的 ObservableCollection 外部绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28486426/