我不知道如何根据Path
在UserControl
内设置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
属性。
目标是拥有一个可绑定到任何路径的用户控件。 我知道这一定非常简单,但我对这项技术很陌生,我找不到解决方案。
答案 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靠近,以防万一;)