Как изменить отображение данных комбинированного списка Silverlight - PullRequest
1 голос
/ 26 июля 2010

У меня есть поле со списком, определенное следующим образом:

<ComboBox x:Name="cboDept" Grid.Row="0" Margin="8,8,8,8" HorizontalAlignment="Left" VerticalAlignment="Top" Width="120" 
                  ItemsSource="{Binding Source={StaticResource cvsCategories}}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Vertical" Width="Auto" Height="Auto">
                        <sdk:Label Content="{Binding CategoryID}" Height="20" />
                        <sdk:Label Content="{Binding CategoryName}" Height="20" />
                    </StackPanel>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>

Работает нормально.Однако, как только я выбираю элемент в списке, я хочу, чтобы к выбранному элементу комбинированного списка отображался другой шаблон (элемент, отображаемый после исчезновения всплывающего окна).В приведенном выше случае я хочу, чтобы в ComboBox отображалось только CategoryName, как только я выбрал соответствующий элемент.

Может кто-нибудь сообщить мне, как этого добиться?

спасибо

1 Ответ

0 голосов
/ 27 июля 2010

Что вам нужно сделать, это создать ResourceDictionary, содержащий несколько определенных шаблонов самостоятельно.Ниже ComboBoxTemplateOne и ComboBoxTeplateTwo - это пользовательские элементы управления, предназначенные для отображения комбинированного списка в выбранной вами усадьбе.

   <UserControl.Resources>
        <ResourceDictionary>
          <DataTemplate x:Key="TemplateOne">
               <local:ComboBoxTemplateOne />
            </DataTemplate>
          <DataTemplate x:Key="TemplateTwo">
               <local:ComboBoxTemplateTwo />
            </DataTemplate>
        </ResourceDictionary>
   </UserControl.Resources>

Затем вам нужно будет создать собственный класс, который наследует от ContentControl «DataTemplateSelector»,переопределение OnContentChanged

  Protected Overrides Sub OnContentChanged(ByVal oldContent As Object, ByVal newContent As Object)
    MyBase.OnContentChanged(oldContent, newContent)

    Me.ContentTemplate = SelectTemplate(newContent, Me)

  End Sub

Затем вам нужно будет создать другой класс, который наследует от вышеуказанного DataTemplateSelector, который переопределяет SelectTemplate ("TemplateSelectorClass"), который будет возвращать DataTemplate, определенный выше ("TemplateOne" или "TemplateTwo"),Также в этом производном классе вам нужно будет определить свойство для каждого из ваших шаблонов

Public Property ComboboxTemplateOne As DataTemplate

Затем вернитесь к своему XAML и получите удар XAML

 <local:TemplateSelectorClass  ComboboxTemplateOne="{StaticResource TemplateOne}"  Content="{Binding Path=ActiveWorkspace}>

Thisдолжен работать, так как он фактически выполняет ту же работу, что и установка свойства «DataTemplate» в WPF (которого нет в SilverLight). Я понимаю, что здесь есть довольно много шагов, и это довольно сложно, но, надеюсь, это поможет вам,Любые вопросы просто кричите.

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