【问题标题】:WPF MVVM: Call method from control from inside attached usercontrolWPF MVVM:从附加的用户控件内部的控件调用方法
【发布时间】:2015-05-05 06:27:21
【问题描述】:

我有自定义控件 (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()" 访问方法? 例如如果我将用户控件绑定到 Q1 - Q4 的内容控件并且用户控件包含一个按钮“执行它!”这如何从 FooCtrl 访问“DoSomething()”以便执行?

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

【问题讨论】:

    标签: c# wpf mvvm user-controls caliburn.micro


    【解决方案1】:

    如果DoSomething() 真的只是基于视图的,因为它只是驱动动画,并且该动画不代表任何类型的模型状态,那么您可以使用RoutedCommand

    您的FooControl 可以公开自定义路由命令,并且您的“执行此操作!”按钮可以绑定到它。路由命令将在可视树上上下移动,直到找到具有匹配命令绑定的内容。在你的情况下,它们会冒泡到树上,直到它们碰到你的FooControl,然后它会执行命令。

    另一种选择是让 FooControl 公开按钮可以绑定到的 Attached Properties。就像Grid 里面的东西一样,可以使用Grid.Row 告诉他们的父母他们想住在哪里。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-08
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多