0

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

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

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

4

1 回答 1

0

我现在已经用 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;
    }
}
于 2015-10-02T09:27:59.050 回答