2011-08-05 68 views
0

我有一个数据绑定ComboBox,我似乎无法设置SelectedItem。我尝试过SelectedValue/SelectedValuePath,但遇到困难。WPF数据绑定列表视图与组合框选定项目问题

为了解释场景,我有一个父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> 
+0

如果你提到你对工作和相应的更新代码(该平台这将有助于例如:wpf,.net等) –

+0

声明XAML,但用于WPF应用程序。 – user880256

回答

0

是一个简单的决议,花时间一个很好的协议,终于弄明白......

<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>