Jos*_*ant 5 c# data-binding wpf
我正在为一个丰富的TreeView创建一个UserControl(一个具有重命名节点,添加子节点等的上下文菜单).我希望能够使用此控件来管理或导航我将创建的任何分层数据结构.我目前使用它来实现任何实现以下接口的数据结构(接口实际上不需要实现,但是,只需要存在这些成员):
interface ITreeItem
{
string Header { get; set; }
IEnumerable Children { get; }
}
Run Code Online (Sandbox Code Playgroud)
然后在我的UserControl中,我使用模板将我的树绑定到数据结构,如下所示:
<TextBlock x:Name="HeaderTextBlock" Text="{Binding Path=Header}" />
Run Code Online (Sandbox Code Playgroud)
我想要做的是在我的RichTreeView中定义每个成员的名称,允许它适应一系列不同的数据结构,如下所示:
class MyItem
{
string Name { get; set; }
ObservableCollection<MyItem> Items;
}
<uc:RichTreeView ItemSource={Binding Source={StaticResource MyItemsProvider}}
HeaderProperty="Name" ChildrenProperty="Items" />
Run Code Online (Sandbox Code Playgroud)
有没有办法将UserControl中的绑定路径公开为该UserControl的公共属性?还有其他方法可以解决这个问题吗?
也许这可能有帮助:
当您在 Header 依赖项属性上设置 HeaderProperty 属性时,创建一个新的 Binding:
标头属性是您日常使用的 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));
Run Code Online (Sandbox Code Playgroud)
并且 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);
}
}
Run Code Online (Sandbox Code Playgroud)
HeaderProperty 是您日常使用的 DependencyProperty,其方法会在 HeaderProperty 发生更改时立即调用。因此,当它更改时,它会在 Header 上创建一个绑定,该绑定将绑定到您在 HeaderProperty 中设置的路径。:)
归档时间: |
|
查看次数: |
3521 次 |
最近记录: |