Загрузка UserControl в область изменения окна ComboBox - PullRequest
1 голос
/ 23 сентября 2011

У меня есть ComboBox, который заполнен коллекцией пользовательских типов.При изменении comboBox я хотел бы загрузить / изменить содержимое в определенном регионе, чтобы он загружал связанные данные для выбранного элемента ComboBox (это может быть в форме загрузки userControl или я не против указать для него DataTemplate).

Этот вопрос аналогичен Вопрос управления нагрузкой WPF .Но в этом вопросе он говорит об отдельных шаблонах данных в реальном списке, а я говорю о заполнении определенной области окна при изменении ComboBox.

Я использую MVVM (а не PRISM) .Net 3.5.

Ответы [ 2 ]

2 голосов
/ 23 сентября 2011

U может использовать ContentControl, который является заполнителем для фактического Content, который определяется динамически в соответствии с выбором в выпадающем списке.

Следующий код предназначен только для ознакомления

<Window ...>

   <Window.Resources>
       <MyView1 x:Key="MyView1" />
       <MyView2 x:Key="MyView2" />
   </Window.Resources>  

   ...

   <ComboBox x:Name="MyCombo">
       <ComboBox.ItemsSource>
           <sys:String>"MyView1"</sys:String>
           <sys:String>"MyView2"</sys:String>
           ....
       </ComboBox.ItemsSource>
   </ComboBox>

   ... 

   <!-- This is where your region is loaded -->
   <ContentControl>
       <ContentControl.Style>
           <Style TargetType="{x:Type ContentControl}">
               <Style.Triggers>
                   <DataTrigger Binding="{Binding Path=SelectedItem,
                                                  ElementName=MyCombo}"
                                Value="MyView1">
                        <Setter Property="Content"
                                Value="{StaticResource MyView1}"
                   </DataTrigger>
                   <DataTrigger Binding="{Binding Path=SelectedItem,
                                                  ElementName=MyCombo}"
                                Value="MyView2">
                        <Setter Property="Content"
                                Value="{StaticResource MyView2}"
                   </DataTrigger>
               </Style.Triggers>
           </Style>
       </ContentControl.Style>
   </ContentControl> 
</Window>

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

1 голос
/ 23 сентября 2011

Насколько я понимаю, вопрос в том, как изменить базовые данные, привязанные к пользовательскому интерфейсу, а не только к DataTemplate.

Вы можете использовать EventSetter, который будет обрабатываться в коде, где вы можете переключать DataContext для региона, который вы упомянули:

<ComboBox>
     <ComboBox.Resources>         
         <Style TargetType="ComboBoxItem">             
           <EventSetter Event="Selector.SelectionChanged"
                        Handler="YourHandler"/>         
         </Style>     
     </ComboBox.Resources> 
</ComboBox>

Но с точки зрения MVVM это может быть не идеальное решение, поэтому вы можете представить свой собственный класс ComboBox с поддержкой команд, см. Этот пост SO: Поддержка команд WPF в ComboBox

Таким образом, вы можете отделить логику от пользовательского интерфейса, используя Command.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...