Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF绑定用户控件属性不工作_C#_Wpf_Xaml_Data Binding - Fatal编程技术网

C# WPF绑定用户控件属性不工作

C# WPF绑定用户控件属性不工作,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,我有一个用户控件,我正在尝试绑定它的一个属性 用户控制Xaml 用户控制代码隐藏 public部分类示例:UserControl { 公共示例() { 初始化组件(); ExampleViewModel vm=新ExampleViewModel(状态); DataContext=vm; } 公共布尔状态 { 获取{return(Boolean)this.GetValue(StateProperty);} set{this.SetValue(StateProperty,value);} } 公

我有一个用户控件,我正在尝试绑定它的一个属性

用户控制Xaml

用户控制代码隐藏
public部分类示例:UserControl
{
公共示例()
{
初始化组件();
ExampleViewModel vm=新ExampleViewModel(状态);
DataContext=vm;
}
公共布尔状态
{
获取{return(Boolean)this.GetValue(StateProperty);}
set{this.SetValue(StateProperty,value);}
}
公共静态只读DependencyProperty StateProperty=
DependencyProperty.Register(“状态”,
typeof(布尔)、typeof(示例)、new PropertyMetadata(false));
}
主页视图模型
class ExampleViewModel
{
公共示例视图模型(bool v)
{
val=v;
}
布尔瓦尔;
公共字符串文本{get=>val?“这起作用了”:“这不起作用”}
}
主窗口Xaml


在本例中,我没有绑定State变量,只传递了一个文本,但理想情况下我希望绑定到实际值。

State
是一个布尔值,而您绑定到
Text
。让我们通过在用户控件上创建依赖项属性
Text
来解决一个问题。我们将解决
文本
问题,而不是布尔
状态
问题。一旦解决了这个问题,请对
状态执行相同的操作

因此,要修复
文本
,我们需要修复失败的原因:

 <Label Content="{Binding Text, ElementName=LabelControl}"/>

您可以将
ElementName
设置为用户控件本身,这正是您想要的。但是,您告诉绑定查找属性
Text
(记住绑定只是一个对象在封面下的反射)。属性
Text
在该实例/类上不存在,但
状态
存在。显然,要解决第一个问题,需要绑定到用户控件上新创建的
Text
dependency属性


然后,当您在主页上实例化该控件时,您需要然后绑定到
Text
,因为该属性也驻留在您的viewmodel上

有三件事,以及UserControl上提到的更改:

  • 使您的ViewModel遵守
    INotifyPropertyChanged
    ,并使
    Text
    属性使用您安装的通知机制
  • 确保主页将其
    DataContext
    设置为ViewModel类的VALIID实例
  • 绑定到
    文本
    ,例如

  • 完成后,
    文本
    值将正确地流向UserControl。

    还要注意
    DataContext=vm将有效地破坏其属性的任何基于DataContext的绑定。例如,
    将无法按预期工作。公开可绑定属性的UserControl不能显式设置自己的DataContext。