【问题标题】:Using multiple ObjectDataProviders with the same control使用具有相同控件的多个 ObjectDataProvider
【发布时间】:2012-02-06 22:03:12
【问题描述】:

我刚刚开始学习 WPF 中的绑定,并且在使用具有相同控件的多个 ObjectDataProvider 时遇到了一些麻烦。

我有两个 ObjectDataProvider:

  1. 用于从数据库中获取客户位置列表并用于填充 TreeView 和
  2. 将位置作为参数并返回该位置的所有客户,并填充列表视图。

我想这样当我单击 TreeView 项目之一时,它会将 SelectedItem 文本作为参数,使用它来填充列表视图。

    <ObjectDataProvider 
        x:Key="getLocations" 
        ObjectType="{x:Type local:DataSetCreator}"
        MethodName="getLocations" 
        />

    <ObjectDataProvider 
        x:Key="getCustomersFromLocation" 
        ObjectType="{x:Type local:DataSetCreator}"
        MethodName="getCustomersFromLocation">
        <ObjectDataProvider.MethodParameters>
            <x:Static Member="System:String.Empty" />
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>


    <TreeView HorizontalAlignment="Left" 
        Margin="12,12,0,12" 
        Name="treeView2" Width="186"      
        ItemsSource="{Binding Source={StaticResource getLocations}}" >

        <TreeView.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Country}" />                    
            </DataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>


    <ListView x:Name="lstCustomers"
            ItemsSource="{Binding Source={StaticResource getCustomersFromLocation}}" Margin="204,41,12,12">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="CustomerID"
                        Width="200"
                        DisplayMemberBinding="{Binding Path=CustomerID}" />
                <GridViewColumn Header="Company Name"
                        Width="370"
                        DisplayMemberBinding="{Binding Path=CompanyName}" />
            </GridView>
        </ListView.View>
    </ListView>

是否可以在 XAML 中实现这一点,还是我需要使用代码隐藏?

【问题讨论】:

  • 您可以使用绑定:ElementName=treeView2、Path=SelectedItem、自定义IValueConverter...

标签: wpf binding objectdataprovider


【解决方案1】:

ObjectDataProviders 不是很灵活,因为它们不能被绑定。除其他外,您可以绑定到TreeViewSelectedItem 并使用Binding.Converter 根据该值为您获取正确的项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多