在HierarchicalDataTemplate中使用ObjectDataProvider

本文关键字:ObjectDataProvider HierarchicalDataTemplate | 更新日期: 2023-09-27 18:15:33

我想将类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?

怎么做才是正确的呢?

和NO,它不可能使用属性…

在HierarchicalDataTemplate中使用ObjectDataProvider

我现在已经用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;
    }
}

相关文章:
  • 没有找到相关文章