Основы WPF: как установить внешнее свойство в DataTrigger? - PullRequest
1 голос
/ 13 мая 2009

Я пытаюсь обернуть голову вокруг модели WPF.

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

У меня есть это:

<ListBox.ItemTemplate>
 <DataTemplate>
   <StackPanel Width="320">
    <Label Content="{Binding Path=ShortName}" Style="{StaticResource ListHeader}"/>
      <TextBlock TextWrapping="Wrap" Text="{Binding Path=Description}" Style="{StaticResource ListText}" />
   </StackPanel>
 </DataTemplate>
 </ListBox.ItemTemplate>

И я думаю, что я должен добавить что-то вроде:

<DataTemplate.Triggers>
    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="True">
    <Setter Property="" TargetName="">
     <Setter.Value>

     </Setter.Value>
   </Setter>
 </DataTrigger>

Но я заблудился относительно того, как настроить установщик для установки свойства, являющегося частью окружающего элемента управления (то есть внешнего мира). Я думаю, что это как-то задом наперед?

Ответы [ 2 ]

1 голос
/ 13 мая 2009

Вы пытались использовать свойство SelectedValuePath ?

Если у вас есть список, скажем, «Клиенты» в свойстве ItemsSource, и вы установили для «SelectedValuePath» значение «Имя», ваше свойство SelectedValue будет возвращать имя клиента вместо клиента ...

В вашем коде сзади SelectedValue будет Name, SelectedItem вернет ваш объект Customer .. в моем примере ..

Надеюсь, это поможет как-то ..

Удачи!

1 голос
/ 13 мая 2009

Если вы пытаетесь получить доступ к свойству выбранного элемента списка из-за пределов списка, вы можете сделать следующее в своем коде:

CustomItem item = (CustomItem)listBox1.SelectedItem;
MessageBox.Show(item.ShortName);

И ваш xaml выглядит следующим образом:

<ListBox Height="100" Name="listBox1">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Name="stackPanel1">
                    <Label Content="{Binding Path=Shortname}"/>
                    <TextBlock Text="{Binding Path=Description}"/>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

Вы просто приводите выбранный элемент из списка к типу объекта, а затем получаете доступ к свойству объекта.

Надеюсь, это то, что вы были после.

...