Список представлений данных WPF с выпуском выбранного элемента ComboBox - PullRequest
0 голосов
/ 05 августа 2011

У меня есть ComboBox с данными, где я не могу установить SelectedItem.Я пробовал SelectedValue / SelectedValuePath, но у меня возникают трудности.

Чтобы объяснить сценарий, у меня есть родительский ListView, который содержит ComboBoxes w / в ListViewItems.Родительский ListView и дочерний ComboBox имеют один и тот же источник данных, но отображают разные данные.Например, расширение 2 ссылается на расширение 1. В этом случае я пытаюсь проиллюстрировать, что 2 отражает одно.Пользователь должен иметь возможность изменять, на какое расширение он указывает, на себя или на любое другое.Кроме этого, это очень просто, но почти есть.

Вот пример, который вы можете запустить из вашего любимого редактора xaml.

 <Page
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

 <Page.Resources>

  <XmlDataProvider x:Key="xmlDataProvider">
   <x:XData>
    <Extensions xmlns="">
     <Extension>
      <ExtId>1</ExtId>
      <ExtName>Extension 1</ExtName>
      <ExtValue>1</ExtValue>
     </Extension>
     <Extension>
      <ExtId>2</ExtId>
      <ExtName>Extension 2</ExtName>
      <ExtValue>1</ExtValue>
     </Extension>
     <Extension>
      <ExtId>3</ExtId>
      <ExtName>Extension 3</ExtName>
      <ExtValue>3</ExtValue>
     </Extension>
     <Extension>
      <ExtId>4</ExtId>
      <ExtName>Extension 4</ExtName>
      <ExtValue>4</ExtValue>
     </Extension>
    </Extensions>
   </x:XData>
  </XmlDataProvider>

  <!-- Extensions -->
  <CollectionViewSource 
   x:Key="CollectionViewSourceExtensions" 
   Source="{Binding Source={StaticResource xmlDataProvider}, XPath=Extensions/Extension}" />

 </Page.Resources>

 <Grid> 

  <ListView 
   ItemsSource="{Binding 
   Source={StaticResource CollectionViewSourceExtensions},
   Mode=OneWay}">

   <ListView.ItemTemplate>
     <DataTemplate>
       <StackPanel>
       <StackPanel Orientation="Horizontal">
         <TextBlock Text="{Binding XPath=ExtName}" />
         <TextBlock Text=" - " />
         <TextBlock Text="{Binding XPath=ExtValue}" />
       </StackPanel>
       <ComboBox
        SelectedItem="{Binding XPath=ExtId}"
        ItemsSource="{Binding
          Source={StaticResource CollectionViewSourceExtensions},
          Mode=OneTime}">

         <ComboBox.ItemTemplate>
           <DataTemplate>
             <TextBlock Text="{Binding XPath=ExtId}" />
           </DataTemplate>
         </ComboBox.ItemTemplate>

        </ComboBox>
       </StackPanel>
     </DataTemplate>
   </ListView.ItemTemplate>

 </ListView>

 </Grid>

</Page>

1 Ответ

0 голосов
/ 06 августа 2011

Это было простое решение, которое потребовало много времени, чтобы наконец выяснить ...

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Page.Resources>
    <XmlDataProvider x:Key="SamplePeople">
        <x:XData>
            <Extensions xmlns="">
                <Exension>
                    <Id>1</Id>
                    <Name>Line Key 1</Name>
                    <Value>1</Value>
                </Exension>
                <Exension>
                    <Id>2</Id>
                    <Name>Line Key 2</Name>
                    <Value>1</Value>
                </Exension>
                <Exension>
                    <Id>3</Id>
                    <Name>Line Key 3</Name>
                    <Value>3</Value>
                </Exension>
                <Exension>
                    <Id>4</Id>
                    <Name>Line Key 4</Name>
                    <Value>4</Value>
                </Exension>
            </Extensions>
        </x:XData>
    </XmlDataProvider>    
</Page.Resources>
<Grid>  
    <ListBox x:Name="PeopleListBox" 
        DataContext="{Binding Source={StaticResource SamplePeople}}" 
        ItemsSource="{Binding Mode=Default, XPath=/Extensions/node()}" 
        IsSynchronizedWithCurrentItem="True">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding XPath=Name}" />
                    <TextBlock Text=" is " />
                        <ComboBox
                        SelectedValue="{Binding XPath=Value}"
                                ItemsSource="{Binding Mode=Default, XPath=/Extensions/Exension/Id}" >
                            </ComboBox>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>
</Page>
...