我有一个ContentControl
使用ContentTemplate
.
ContentTemplate
包含一个简单的嵌套ListBox
在 aGrid
中。网格具有DataContext
使用代码设置的属性(绑定到CollectionViewSource
- 我们称之为 cvs1)。ListBoxItemsSource
继承自 Grid 并且 ListBox 项的填充工作正常。例如
<Grid x:Name="Grid1">
<ListBox x:Name="ListBox1" ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True"/>
</Grid>
ListBox 正在设置样式,主要样式存储在 ResourceDictionary 中。
我正在使用 a 为 ListBox 设置样式值ItemTemplate
,但我还想要使用 aDataTrigger
来动态应用不同的 Setter。我面临的挑战是我似乎无法在 DataTrigger(s) 中建立绑定到单独的 CollectionViewSource(我们称之为 cvs2)。
<Style TargetType="{x:Type ListBox}">
<Style.Triggers>
<!-- This seems to be trying to bind to cvs1, the error is it can't find the property -->
<DataTrigger Binding="{Binding cvs2, Path=TemplateName}" Value="ABC">
<Setter Property="ItemTemplate">
</DataTrigger>
<!-- This just doesn't seem to work -->
<DataTrigger Binding="{Binding Source={StaticResource cvs2},Path=TemplateName}" Value="XYZ">
<Setter Property="ItemTemplate">
</DataTrigger>
</Style.Triggers>
</Style>
cvs1 和 cvs2 都在 a 中定义ResourceDictionary
。
<CollectionViewSource x:Key="cvs1" />
<CollectionViewSource x:Key="cvs2" />
然后引用如下:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="DataSources.xaml" />
</ResourceDictionary.MergedDictionaries>
我似乎面临的问题是ItemTemplate
从 ListBox 继承 DataContext,我似乎无法解决这个问题来建立与 cvs2 数据源的绑定。我认为这将是一项相当常规的StaticResource
绑定任务。似乎情况并非如此。
我已经在网格外(在主窗口中)的标签中测试了以下代码来调试数据:
<Label Content="{Binding cvs2, Path=/TemplateName}"/>
这行得通,标签填充了 TemplateName 的值。
但是,如果我在DataTrigger
内部使用这个ItemsTemplate
,绑定就不会建立。
如何从 ? 中建立到 cvs2 的绑定ItemTemplate
?