首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ObjectDataProvider在HierarchicalDataTemplate中的应用

ObjectDataProvider在HierarchicalDataTemplate中的应用
EN

Stack Overflow用户
提问于 2015-10-02 08:30:20
回答 1查看 121关注 0票数 0

我想将类treeviewitem的项添加到TreeView中。

我想将这个ItemSource的TreeViewItem绑定到它本身的一个方法上!

我试着用ObjectDataProvider来做这个..。见我的XAML:

代码语言:javascript
复制
<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?

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

不,不可能使用房产..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-02 09:27:59

我现在用ValueConverter做了这件事。

XAML:

代码语言:javascript
复制
<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>

转换器:

代码语言:javascript
复制
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;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32903307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档