【问题标题】:WPF Databinding ListView with ComboBox Selected Item IssueWPF 数据绑定 ListView 与 ComboBox 选定项问题
【发布时间】:2011-08-05 09:22:27
【问题描述】:

我有一个数据绑定的组合框,我似乎无法设置 SelectedItem。我尝试过 SelectedValue/SelectedValuePath,但遇到了困难。

为了解释这个场景,我有一个父 ListView,它包含在 ListViewItems 中的 ComboBoxes。父 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>

【问题讨论】:

  • 如果您提及您工作的平台并相应地更新您的标签(例如:wpf、.net 等)会有所帮助
  • 已声明 XAML,但适用于 WPF 应用程序。

标签: wpf data-binding listview combobox selecteditem


【解决方案1】:

这是一个简单的解决方案,需要花费大量时间才能最终弄清楚......

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2013-08-06
    • 2020-10-10
    • 2010-10-11
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多