Выбор ComboBox, отображающий содержимое пользовательского элемента управления на основе определенного стиля триггера данных в одной строке, но удаляющий содержимое из другой строки

У меня есть несколько полей со списком в представлении, каждое в своей строке и привязанное к одному и тому же 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"

Я ожидаю, что пользовательский элемент управления, связанный с выбором поля со списком, появится рядом с выбранным полем со списком и не повлияет на содержимое других строк.


person KSR    schedule 27.08.2019    source источник


Ответы (2)


В вашем ComboBox установите для свойства IsSynchronizedWithCurrentItem значение false

person Aakanksha    schedule 28.08.2019
comment
Спасибо за ответ, но я уже пробовал это, и это не сработало. - person KSR; 28.08.2019