来自用户控件的依赖项属性-WPF

来自用户控件的依赖项属性-WPF,wpf,user-controls,dependency-properties,Wpf,User Controls,Dependency Properties,这可能是一个非常愚蠢的问题,但我正试图找出我的代码出了什么问题 我有一个用户控件,里面有一个按钮。我声明了一个dependencProperty,它绑定到用户控件内按钮的内容(是的,这很奇怪) 现在,我在主xaml页面中使用了该用户控件的两个实例,并且Dependency属性绑定到ViewModel中的一个属性。但是,绑定在运行时失败 问题是——为什么它不起作用 代码: 公共部分类主窗口:窗口 { ViewModel vm=新的ViewModel(); 随机r=新随机(); 公共主窗口() {

这可能是一个非常愚蠢的问题,但我正试图找出我的代码出了什么问题

我有一个用户控件,里面有一个按钮。我声明了一个
dependencProperty
,它绑定到用户控件内按钮的内容(是的,这很奇怪)

现在,我在主xaml页面中使用了该用户控件的两个实例,并且Dependency属性绑定到ViewModel中的一个属性。但是,绑定在运行时失败

问题是——为什么它不起作用

代码:


公共部分类主窗口:窗口
{
ViewModel vm=新的ViewModel();
随机r=新随机();
公共主窗口()
{
初始化组件();
this.DataContext=vm;
}
private void OnClickedOne(对象发送方,RoutedEventArgs e)
{
vm.CanEnableOne=r.Next(1100).ToString();
}
private void OnClickedTwo(对象发送方,RoutedEventArgs e)
{
vm.CanEnableTwo=r.Next(1100).ToString();
}
}
公共类视图模型:INotifyPropertyChanged
{
私人字符串_canEnableOne;
塞拉利昂公共字符串
{
获取{return\u canEnableOne;}
设置
{
如果(_=value)
返回;
_canEnableOne=价值;
InvokePropertyChanged(“CanEnableOne”);
}
}
私有字符串_canEnableTwo;
公共字符串CanEnableTwo
{
获取{return\u canEnableTwo;}
设置
{
如果(_canEnableTwo==值)
返回;
_canEnableTwo=值;
InvokePropertyChanged(“CanEnableTwo”);
}
}
公共事件属性更改事件处理程序属性更改;
公共void InvokePropertyChanged(字符串e)
{
PropertyChangedEventHandler处理程序=PropertyChanged;
if(handler!=null)handler(这是新属性changedeventargs(e));
}
}
公共部分类UserControl1:UserControl
{
公共用户控制1()
{
初始化组件();
}
公共静态只读从属属性NewContentProperty=
DependencyProperty.RegisterAttached(“新内容”,
类型(字符串),
typeof(UserControl1)、new PropertyMetadata(new PropertyChangedCallback(PropertyChanged));
私有静态void属性已更改(DependencyObject d、DependencyPropertyChangedEventArgs e)
{
System.Diagnostics.Debug.WriteLine(“Hello”);
}
公共字符串NewContent
{
get{return(string)GetValue(NewContentProperty);}
set{SetValue(NewContentProperty,value);}
}
}
错误:System.Windows.Data错误:39:BindingExpression路径错误:在“对象”“ViewModel”(HashCode=23172649)“上未找到“NewContent”属性。BindingExpression:Path=NewContent;DataItem='ViewModel'(HashCode=23172649);目标元素是“按钮”(名称=“”);目标属性为“内容”(类型为“对象”)
System.Windows.Data错误:39:BindingExpression路径错误:“在对象”“ViewModel'(HashCode=23172649)”上找不到“NewContent”属性。BindingExpression:Path=NewContent;DataItem='ViewModel'(HashCode=23172649);目标元素是“按钮”(名称=“”);目标属性为“内容”(类型为“对象”)

记住,
{Binding}
默认情况下总是将
DataContext
作为属性的源。这就是代码不起作用的原因,
NewContent
不是ViewModel中的属性

如果要将绑定的源更改为UserControl,这是一种方法:

<UserControl x:Class="WpfApplication2.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" 
             d:DesignWidth="300"
             x:Name="myControl">
    <Grid>
        <Button Content="{Binding ElementName=myControl, Path=NewContent></Button>    
    </Grid>
</UserControl>

<UserControl x:Class="WpfApplication2.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" 
             d:DesignWidth="300"
             x:Name="myControl">
    <Grid>
        <Button Content="{Binding ElementName=myControl, Path=NewContent></Button>    
    </Grid>
</UserControl>