2010-09-20 2 views
0

У меня есть список на usercontrol, который заполняется XML-файлом.wpf - ListBox - привязать SelectedItem к атрибуту xml?

<Machines xmlns=""> 
    <Machine Name="Prod1" IP="192.168.1.200" isDefault="true" InstanceName="sql08" /> 
    <Machine Name="Prod2" IP="192.168.1.101" /> 
    <Machine Name="Test1" IP="192.168.1.103" /> 
    <Machine Name="Test2" IP="192.168.1.104" /> 
</Machines> 

Я хотел бы привязать выбранный элемент Listbox к машине с атрибутом isDefault = true.

Мой текущий xmldataprovider и ItemTemplate перечислены ниже вместе с моей разметкой ListBox. Я не был уверен, нужно ли мне делать привязку xpath в datatemplate, или если я должен создать явный стиль с триггером для этой задачи? Или если любой из этих подходов будет работать? Одна из вещей, которые я не могу понять, - это то, как я могу привязываться к атрибуту, который существует только на одном узле моего файла.

<XmlDataProvider x:Key="DataList" Source="XML\ListboxSettings.xml" XPath="Machines/Machine"/> 
     <DataTemplate x:Key="MachineDataTemplate"> 
      <TextBlock Text="{Binding [email protected]}" ToolTip="{Binding [email protected]}" /> 
     </DataTemplate> 

<ListBox Name="MerlinsListbox" Margin="5" Height="{Binding Height, ElementName=border}" Background="#FF252525" FontFamily="Consolas" FontSize="16" Foreground="#FFFBF9F9" 
        ItemsSource="{Binding}" 
        ItemTemplate="{StaticResource MerlinDataTemplate}" 
        IsSynchronizedWithCurrentItem="true"/> 

ответ

0

Два возможных пути вы могли бы справиться с этим следующим образом:

1) Вы можете установить ItemContainerStyle и связать свойство IsSelected в ListBoxItem для атрибута @isDefault.

<ListBox Name="MerlinsListbox" Margin="5" 
      Background="#FF252525" FontFamily="Consolas" FontSize="16" Foreground="#FFFBF9F9" 
      ItemsSource="{Binding Source={StaticResource DataList}}" 
      ItemTemplate="{StaticResource MachineDataTemplate}" 
      IsSynchronizedWithCurrentItem="true"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="IsSelected" Value="{Binding [email protected], Mode=OneTime}"/> 
     </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 

Или 2) добавить триггер для ItemContainerStyle:

<ListBox ...> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding [email protected]}" Value="true"> 
        <Setter Property="IsSelected" Value="True"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 
+0

Спасибо Karmicpuppet. Это отлично сработало для меня. – TWood

+0

Добро пожаловать. ;) – ASanch

Смежные вопросы