gpt4 book ai didi

c# - WPF MVVM : Call method from control from inside attached usercontrol

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:23 24 4
gpt4 key购买 nike

我有自定义控件 (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 个用户控件。通过 FooCtrl 上的“DoSomething()”方法,我可以更改动画 Q1、Q2、Q3 和 Q4:

myFooCtrl.DoSomething();

如何从我的用户控件(通过 Q1、Q2、Q3、Q4 附加)内部访问 FooCtrl“DoSomething()”的方法?例如如果我将用户控件绑定(bind)到 Q1 - Q4 的内容控件并且用户控件包含一个按钮“执行它!”这如何从 FooCtrl 访问“DoSomething()”以便执行?

如果有帮助:我也在使用 Caliburn.Micro。

最佳答案

如果 DoSomething() 确实仅基于 View ,因为它只是驱动动画,而该动画不代表任何类型的模型状态,那么您可以使用 RoutedCommand .

您的 FooControl 可以公开自定义路由命令,以及您的“执行!”按钮可以绑定(bind)到它。路由命令将在可视化树中上下移动,直到找到具有匹配命令绑定(bind)的内容。在您的情况下,它们会在树上冒泡,直到它们击中您的 FooControl,然后它会执行命令。

另一种选择是让 FooControl 公开 Attached Properties按钮可以绑定(bind)到。就像 Grid 中的东西可以使用 Grid.Row 告诉他们的 parent 他们想住在哪里。

如果动画确实代表某种模型状态,那么动画应该由 ViewModel 绑定(bind)驱动。

关于c# - WPF MVVM : Call method from control from inside attached usercontrol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28851536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com