我有自定义控件(FooCtrl),它有4个DependencyProperties(Q1,Q2,Q3和Q4)。
public partical class FooCtrl : UserControl {
// ...
// Q1:
public static readonly DependencyProperty Q1Property =
DependencyProperty.Register("Q1", typeof(UIElement), typeof(FooCtrl), new UIPropertyMetadata(null));
public UIElement Q1
{
get { return (UIElement)GetValue(Q1Property); }
set { SetValue(Q1Property, value); }
}
// Q2:
public static readonly DependencyProperty Q2Property =
DependencyProperty.Register("Q2", typeof(UIElement), typeof(FooCtrl), new UIPropertyMetadata(null));
public UIElement Q2
{
get { return (UIElement)GetValue(Q2Property); }
set { SetValue(Q2Property, value); }
}
// Q3:
// ....
// Q4:
// ....
public void DoSomething()
{
// ...
}
}
我使用控件如:
<my:FooCtrl>
<my:FooCtrl.Q1>
<ContentControl Content="{Binding ...}" />
</my:FooCtrl.Q1>
<my:FooCtrl.Q2>
<ContentControl Content="{Binding ...}" />
</my:FooCtrl.Q2>
<my:FooCtrl.Q3>
<ContentControl Content="{Binding ...}" />
</my:FooCtrl.Q3>
<my:FooCtrl.Q4>
<ContentControl Content="{Binding ...}" />
</my:FooCtrl.Q4>
我可以为FooCtrl Q1,Q2,Q3和Q4属性添加4个用户控件。 通过方法&#34; DoSomething()&#34;在FooCtrl上我可以改变动画Q1,Q2,Q3和Q4:
myFooCtrl.DoSomething();
如何从FooCtrl&#34; DoSomething()&#34;中访问该方法?从我的用户控件内部(通过Q1,Q2,Q3,Q4连接)? E.g。如果我将一个usercontrol绑定到Q1-Q4的contentcontrol并且usercontrol包含一个按钮&#34; Do it!&#34;这怎么能访问&#34; DoSomething()&#34;来自FooCtrl,以便它被执行?
如果有帮助:我也使用Caliburn.Micro。
答案 0 :(得分:0)
如果DoSomething()
真的只是基于视图,因为它只是驱动一个动画,并且该动画不代表任何类型的模型状态,那么你可以使用RoutedCommand。
您的FooControl
可以公开自定义路由命令,以及“执行此操作!”按钮可以绑定到它。路由命令将在可视树中上下移动,直到找到具有匹配命令绑定的内容。在你的情况下,他们会冒泡树,直到他们点击你的FooControl
,然后执行命令。
另一种选择是让FooControl公开按钮可以绑定的Attached Properties。就像Grid
中的内容可以使用Grid.Row
告诉他们的父母他们想要住在哪里。
如果动画DO代表某种模型状态,那么动画应该从ViewModel绑定中驱动。