在UserControl中设置数据绑定路径

时间:2009-02-09 09:45:13

标签: c# wpf data-binding dependency-properties

我不知道如何根据PathUserControl内设置Parameter

用户控制:

<UserControl x:Class="WpfApplication3.TestControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase">
    <Grid>
        <TextBox Text="{Binding Path=MyPath}"/>
    </Grid>
</UserControl>

代码背后:

   public partial class TestControl : UserControl
    {
        public string MyPath
        {
            get { return (string)GetValue(MyPathProperty); }
            set { SetValue(MyPathProperty, value); }
        }
        public static readonly DependencyProperty MyPathProperty =
            DependencyProperty.Register("MyPath", typeof(string), typeof(TestControl), new UIPropertyMetadata(""));
    }

我打算如何使用它:

<local:TestControl MyPath="FirstName"></local:TestControl>

DataContext将从父对象获取,并包含一个User类,其中包含FirstName属性。

目标是拥有一个可绑定到任何路径的用户控件。 我知道这一定非常简单,但我对这项技术很陌生,我找不到解决方案。

2 个答案:

答案 0 :(得分:1)

我终于设法做到了,代码:

private static void MyPathChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    TestControl tc = d as TestControl;
    Binding myBinding = new Binding("MyDataProperty");
    myBinding.Mode = BindingMode.TwoWay;
    myBinding.Path = new PropertyPath(tc.MyPath);
    tc.txtBox.SetBinding(TextBox.TextProperty, myBinding);
}

public static readonly DependencyProperty MyPathProperty =
    DependencyProperty.Register("MyPath",
        typeof(string),
        typeof(TestControl),
        new PropertyMetadata("", MyPathChanged));

用户控件现在有一个没有绑定的文本框:

 <TextBox x:Name="txtBox"></TextBox> 

就是这样。

答案 1 :(得分:1)

当你在XAML中写作时:

<TextBox Text="{Binding Path=MyPath}"/>

这会尝试将您绑定到控件的 DataContext 的MyPath属性。

要绑定到控件自己的属性,我猜你应该写像:

<TextBox Text="{Binding Path=MyPath, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"/>

one of the cheat sheets靠近,以防万一;)