来自用户控件的依赖项属性-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>