首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF中的变量绑定

WPF中的变量绑定
EN

Stack Overflow用户
提问于 2008-08-14 19:01:03
回答 1查看 3.6K关注 0票数 5

我正在为一个富TreeView (一个具有用于重命名节点、添加子节点等的上下文菜单)创建一个UserControl。我希望能够使用此控件来管理或导航我将创建的任何分层数据结构。我目前将它用于实现以下接口的任何数据结构(该接口实际上不需要实现,但是,只需要这些成员的存在):

代码语言:javascript
复制
interface ITreeItem
{
    string Header { get; set; }
    IEnumerable Children { get; }
}

然后在我的UserControl中,我使用模板将树绑定到数据结构,如下所示:

代码语言:javascript
复制
<TextBlock x:Name="HeaderTextBlock" Text="{Binding Path=Header}" />

我想要做的是在我的RichTreeView中定义每个成员的名称,允许它适应一系列不同的数据结构,如下所示:

代码语言:javascript
复制
class MyItem
{
    string Name { get; set; }
    ObservableCollection<MyItem> Items;
}

<uc:RichTreeView ItemSource={Binding Source={StaticResource MyItemsProvider}} 
    HeaderProperty="Name" ChildrenProperty="Items" />

有没有办法将UserControl中绑定的路径公开为该UserControl的公共属性?有没有别的办法来解决这个问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2008-08-15 11:08:06

也许这可能会有所帮助:

在Header dependency属性上设置HeaderProperty属性时,创建新绑定:

Header属性是您日常使用的DependencyProperty:

代码语言:javascript
复制
    public string Header
    {
        get { return (string)GetValue(HeaderProperty); }
        set { SetValue(HeaderProperty, value); }
    }

    public static readonly DependencyProperty HeaderProperty =
        DependencyProperty.Register("Header", typeof(string), typeof(ownerclass));

并且您的HeaderProperty的属性的工作方式如下:

代码语言:javascript
复制
    public static readonly DependencyProperty HeaderPropertyProperty =
        DependencyProperty.Register("HeaderProperty", typeof(string), typeof(ownerclass), new PropertyMetadata(OnHeaderPropertyChanged));

    public string HeaderProperty        
    {
        get { return (string)GetValue(HeaderPropertyProperty); }
        set { SetValue(HeaderPropertyProperty, value); }
    }

   public static void OnHeaderPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
    {
        if (args.NewValue != null)
        {
            ownerclass c = (ownerclass) obj;

            Binding b = new Binding();
            b.Path = new PropertyPath(args.NewValue.ToString());
            c.SetBinding(ownerclass.HeaderProperty, b);
        }
    }

HeaderProperty是您日常使用的DependencyProperty,它有一个方法,只要HeaderProperty改变就会被调用。因此,当它发生变化时,它会在头上创建一个绑定,该绑定将绑定到您在HeaderProperty中设置的路径。:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11516

复制
相关文章

相似问题

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