我有一个带有依赖项属性的usercontrol。
public sealed partial class PenMenu : UserControl, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public bool ExpandCollapse
{
get
{
return false;
}
set
{
//code
}
}
public static readonly DependencyProperty ExpandCollapseProperty = DependencyProperty.Register("ExpandCollapse", typeof(bool), typeof(PenMenu), null);
//some more code
}
我在XAML页面中将值分配为:
<Controls:PenMenu x:Name="penMenu" Opened="Menu_Opened"
ExpandCollapse="{Binding PenMenuVisible}" />
但它没有在usercontrol中击中ExpandCollapse属性的GET-SET部分。 所以我添加bool到bool转换器只是为了检查通过绑定传递的值:
<Controls:PenMenu x:Name="penMenu" Opened="Menu_Opened"
ExpandCollapse="{Binding PenMenuVisible, Converter={StaticResource booleanToBooleanConverter}}" />
使用Converter中的断点,我看到传递的值是正确的。 它没有分配给依赖属性的可能原因是什么?
如果我说:
,也在XAML页面中<Controls:PenMenu x:Name="penMenu" Opened="Menu_Opened"
ExpandCollapse="true"/>
然后它命中usercontrol中的ExpandCollapse属性的GET-SET部分。 我被卡住了。这很奇怪。请帮忙。
答案 0 :(得分:23)
令人沮丧的不是吗?首先,包括已更改的事件处理程序。像这样:
public string Title
{
get { return (string)GetValue(TitleProperty); }
set { SetValue(TitleProperty, value); }
}
public static readonly DependencyProperty TitleProperty =
DependencyProperty.Register("Title", typeof(string),
typeof(MyControl), new PropertyMetadata(string.Empty, Changed));
private static void Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var c = d as MyControl;
// now, do something
}
然后,请阅读这篇文章,以便您看到有更多的问题而不仅仅是那个问题:http://blog.jerrynixon.com/2013/07/solved-two-way-binding-inside-user.html
祝你好运!
答案 1 :(得分:5)