我创建了一个名为TagItem的UserControl类,它目前只包含一个名为mainButton的Button。
它有一个名为DisplayedTag的依赖项属性,它是Tag的类型(包含有关我的标签的数据的简单类)。我的目标是当用户从XAML设置DisplayedTag时,mainButton的文本应该更新为Tag的TagName。
TagItem中的代码:
public Tag DisplayedTag
{
get { return (Tag)GetValue(DisplayedTagProperty); }
set
{
SetValue(DisplayedTagProperty, value);
}
}
// Using a DependencyProperty as the backing store for MyProperty.
// This enables animation, styling, binding, etc...
public static DependencyProperty DisplayedTagProperty =
DependencyProperty.Register("DisplayedTag",
typeof(Tag),
typeof(TagItem),
new PropertyMetadata(new Tag(),
OnDisplayedTagPropertyChanged));
private static void OnDisplayedTagPropertyChanged(DependencyObject source,
DependencyPropertyChangedEventArgs e)
{
// Put some update logic here...
Tag tag = (Tag)e.NewValue;
mainButton.Content = tag.TagName;
}
在XAML中:
<local:TagItem DisplayedTag="{Binding}"/>
这不起作用,因为OnDisplayedTagPropertyChanged是静态的,而mainButton则不是。我可能在这里完全错误的轨道,并且非常欣赏解决这个简单问题的一些方向。
答案 0 :(得分:2)
在source
回调的OnDisplayedTagPropertyChanged
参数中,您将获得UserControl派生控件。您只需将其强制转换即可访问其成员mainButton
。
我为你的班级取了任何名字(不知道一切是否正确):
private static void OnDisplayedTagPropertyChanged(DependencyObject source,
DependencyPropertyChangedEventArgs e)
{
MyUserControl ctrl = source as MyUserControl;
if(ctrl == null) // should not happen
return;
Button b = ctrl.mainButton;
Tag tag = (Tag)e.NewValue;
mainButton.Content = tag.TagName;
}