【问题标题】:Using ObjectDataProvider inside HierarchicalDataTemplate在 HierarchicalDataTemplate 中使用 ObjectDataProvider
【发布时间】:2015-10-02 08:30:20
【问题描述】:

我想将我班级 treeviewitem 的项目添加到 TreeView。

我想把这个 TreeViewItem 的 ItemSource 绑定到它自己的一个方法上!

我正在尝试为此使用 ObjectDataProvider。请参阅我的 XAML:

<Grid Background="#FFE5E5E5">
    <Grid.Resources>
        <HierarchicalDataTemplate DataType="{x:Type myNs:treeviewitem}">
            <HierarchicalDataTemplate.Resources>
                <ObjectDataProvider x:Key="getItems"
                                    MethodName="GetItems"
                                    ObjectInstance="{Binding RelativeSource={RelativeSource Self}}" />
            </HierarchicalDataTemplate.Resources>
            <HierarchicalDataTemplate.ItemsSource>
                <Binding Source="{StaticResource getItems}" />
            </HierarchicalDataTemplate.ItemsSource>
            <StackPanel Orientation="Horizontal">
                <TextBlock Margin="5,0,0,0"
                           Text="{Binding Name}" />
            </StackPanel>
        </HierarchicalDataTemplate>
    </Grid.Resources>
    <TreeView x:Name="guiTreeview"
              HorizontalAlignment="Left"
              Width="200" />
</Grid>

但绑定到ObjectInstance 是不可能的!

如何将当前对象实例“放入”ObjectDataProvider?

这样做的正确方法是什么?

不,它不可能使用属性..

【问题讨论】:

    标签: c# wpf binding hierarchicaldatatemplate objectdataprovider


    【解决方案1】:

    我现在已经用 ValueConverter 完成了。

    XAML:

    <Grid Background="#FFE5E5E5">
        <Grid.Resources>
            <HierarchicalDataTemplate DataType="{x:Type myNs:MyItem}" ItemsSource="{Binding RelativeSource={RelativeSource Self}, Converter={myNs:GetItemsConverter}}" >
                <StackPanel Orientation="Horizontal">
                    <TextBlock Margin="5,0,0,0" Text="{Binding Name}" />
                </StackPanel>
            </HierarchicalDataTemplate>
    
        </Grid.Resources>
        <TreeView x:Name="guiTreeview" HorizontalAlignment="Left" Width="200" />
    
    </Grid>
    

    转换器:

    public abstract class BaseConverter : MarkupExtension
    {
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return this;
        }
    }
    
    public class GetItemsConverter : BaseConverter, IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            var tvi = value as TreeViewItem;
            if (tvi == null) return null;
    
            var myitem = tvi.DataContext as MyItem;
            if (myitem == null) return null;
    
            return myitem.GetItems();
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return null;
        }
    }
    

    【讨论】:

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