WPF 中的变量绑定
Posted
技术标签:
【中文标题】WPF 中的变量绑定【英文标题】:Variable Bindings in WPF 【发布时间】:2008-08-14 19:01:02 【问题描述】:我正在为丰富的 TreeView 创建一个 UserControl(具有用于重命名节点、添加子节点等的上下文菜单)。我希望能够使用此控件来管理或导航我将创建的任何分层数据结构。我目前让它适用于实现以下接口的任何数据结构(实际上不需要实现接口,但是只需要这些成员的存在):
interface ITreeItem
string Header get; set;
IEnumerable Children get;
然后在我的 UserControl 中,我使用模板将我的树绑定到数据结构,如下所示:
<TextBlock x:Name="HeaderTextBlock" Text="Binding Path=Header" />
我想做的是在我的 RichTreeView 中定义每个成员的名称,使其能够适应一系列不同的数据结构,如下所示:
class MyItem
string Name get; set;
ObservableCollection<MyItem> Items;
<uc:RichTreeView ItemSource=Binding Source=StaticResource MyItemsProvider
HeaderProperty="Name" ChildrenProperty="Items" />
有没有办法将用户控件内的绑定路径公开为该用户控件的公共属性?有没有其他方法可以解决这个问题?
【问题讨论】:
【参考方案1】:也许这可能会有所帮助:
在 Header 依赖属性上设置 HeaderProperty 属性时创建一个新的 Binding:
Header 属性是您日常的 DependencyProperty:
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 的属性如下:
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 更改时立即调用的方法。因此,当它更改时,它会在 Header 上创建一个绑定,该绑定将绑定到您在 HeaderProperty 中设置的路径。 :)
【讨论】:
以上是关于WPF 中的变量绑定的主要内容,如果未能解决你的问题,请参考以下文章