[英]WPF Bind User Control property not working
我有一个用户控件,我试图绑定它的一个属性
<UserControl x:Class="pi_browser.Testing.Example"
...
x: Name="LabelControl">
<StackPanel x:Name="RootStackPanel">
<Label Content="{Binding Text, ElementName=LabelControl}"/>
</StackPanel>
</UserControl>
public partial class Example : UserControl
{
public Example()
{
InitializeComponent();
ExampleViewModel vm = new ExampleViewModel(State);
DataContext = vm;
}
public Boolean State
{
get { return (Boolean)this.GetValue(StateProperty); }
set { this.SetValue(StateProperty, value); }
}
public static readonly DependencyProperty StateProperty =
DependencyProperty.Register("State",
typeof(Boolean), typeof(Example), new PropertyMetadata(false));
}
class ExampleViewModel
{
public ExampleViewModel(bool v)
{
val = v;
}
bool val;
public string Text { get => val ? "This worked" : "This didnt work"; }
}
<Window x:Class="pi_browser.Testing.Tester" ... >
<Grid>
<local:Example State="True"/>
</Grid>
</Window>
在这个例子中,我没有绑定 State 变量,我只传递了一个文字,但理想情况下我想绑定到实际值。
State
是 boolean,但您绑定到Text
。 让我们通过在用户控件上创建依赖属性Text
来解决一个问题。 我们将修复Text
问题,而不是 boolean State
问题。 一旦你解决了这个问题,对State
做同样的事情。
因此,要修复Text
,我们需要修复失败的原因:
<Label Content="{Binding Text, ElementName=LabelControl}"/>
您将ElementName
设置为 UserControl 本身,这正是人们想要的。 但是然后你告诉绑定寻找(记住绑定只是 object 的反映)属性Text
。 该实例/类上不存在属性Text
......但State
存在。 很明显,绑定到用户控件上新创建的Text
依赖属性来解决第一个问题。
然后,当您在主页上实例化控件时,您需要然后绑定到Text
,因为该属性也驻留在您的视图模型上。
所以三件事,以及 UserControl 上提到的变化:
INotifyPropertyChanged
并使Text
属性使用您安装的通知机制。DataContext
设置为 ViewModel class 的有效实例。Text
,例如<local:Example State="{Binding Text}"/>
完成后, Text
值将正确地流向 UserControl。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.