У меня есть несколько полей со списком в представлении, каждое в своей строке и привязанное к одному и тому же ItemsSource. У них есть имя элемента, чтобы отличить их друг от друга. На мой взгляд, в разделе window.resources у меня есть список из семи пользовательских элементов управления, определенных как шаблоны данных. Что я хотел бы сделать, так это то, что когда пользователь выбирает элемент из поля со списком, он отображает содержимое одного из семи пользовательских элементов управления в столбце, прилегающем к соответствующему полю со списком, на основе выбора поля со списком. Я сделал это, используя триггеры данных, определенные в теге ContentControl.style. Проблема заключается в том, что когда я делаю выбор в одном поле со списком, которое оказывается таким же, как и в другом поле со списком, содержимое появляется рядом с самым последним выбранным полем со списком, но исчезает из другого.
Я определил элемент управления содержимым со стилем и триггерами данных и вижу, что содержимое обновляется правильно, пока у меня есть только одно поле со списком. Однако он не работает с более чем одним полем со списком. Я не понимаю, как, хотя для имени элемента DataTrigger Binding задано имя определенного поля со списком, выбор в этом поле со списком влияет на содержимое другой строки, которая привязана к другому имени элемента и поле со списком.
<Window.Resources>
<local:OneLayout x:Key="OneLayout" />
<DataTemplate DataType="{x:Type local:OneLayout}" >
</DataTemplate>
<local:TwoLayout x:Key="TwoLayout" />
<DataTemplate DataType="{x:Type local:TwoLayout}" >
</DataTemplate>
....
<ComboBox x:Name="Layout1" Margin="5" Grid.Row="0" Grid.Column="1"
ItemsSource="{Binding LayoutTypes }" DisplayMemberPath="Name"/>
<ContentControl Grid.Row="0" Grid.RowSpan="3" Grid.Column="2">
<ContentControl.Style>
<Style TargetType="{ x:Type ContentControl }" >
<Setter Property="Content" Value="
{StaticResource ResourceKey=OneLayout}" />
<Style.Triggers>
<DataTrigger Binding="{Binding
SelectedItem.Layout, ElementName=Layout1}"
Value="One">
<Setter Property="Content"
Value="{StaticResource ResourceKey=OneLayout}" />
</DataTrigger>
<DataTrigger Binding="{Binding
SelectedItem.LayoutType, ElementName=Layout1}"
Value="Two">
<Setter Property="Content"
Value="{StaticResource ResourceKey=TwoLayout}" />
</DataTrigger>
......
<ComboBox x:Name="Layout2" Margin="5" Grid.Row="3" Grid.Column="1"
ItemsSource="{Binding LayoutTypes }" DisplayMemberPath="Name"/>
<ContentControl Grid.Row="3" Grid.RowSpan="3" Grid.Column="2" >
... //same as content control above except for
//ElementName="Layout2"
Я ожидаю, что пользовательский элемент управления, связанный с выбором поля со списком, появится рядом с выбранным полем со списком и не повлияет на содержимое других строк.