【发布时间】:2017-07-20 13:23:54
【问题描述】:
我在 C#、NET 3.5 和 Visual Studio 2008 中有一个 MVVM WPF 应用程序。
我从应用程序主 xaml 导入用户控件。
这个用户控件有一些公共方法,有两个我比较感兴趣。
一种启动动画的方法和另一种停止动画的方法。
从代码隐藏 (xaml.cs) 中的视图构造函数中,我调用用户控件公共方法来启动动画以将其显示给用户,同时我将一些数据加载到列表视图中的网格视图中。加载数据的方法在我的视图模型中调用。
所以现在,当加载任务完成时,我需要调用另一个用户控件公共方法来停止动画,但我不知道如何从我的视图模型中执行此操作。
有什么想法吗?我无法触摸用户控件,因为这不是我的。
下面是一段代码。
XAML:
xmlns:controlProgress="clr-namespace:Common.XAML.Controls.Progress;assembly=Common.XAML"
<controlProgress:Progress x:Name="Progress"
Grid.ZIndex="3"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Width="150"
CustomText="Loading...">
代码隐藏 (xaml.cs):
public MyView(ViewModelSession vm)
: base(vm)
{
InitializeComponent();
Progress.StartAnimation();
}
查看模型:
public MyViewModel(Session session)
: base(session)
{
this.LoadDataIntoGridView();
}
【问题讨论】:
-
“我无法触摸用户控件,因为这不是我的。”那么你就不走运了,因为视图模型没有对视图的引用,所以它不能直接调用它的任何方法。
-
我刚刚发布了我的答案,看到那条邪恶的线...我立即删除了它..
-
把你不能碰的UC包在你能碰的UC里。然后将您的 VM 绑定到外部 UC。您可以从外部 UC 的代码隐藏对 VM 中的状态更改做出反应,并对封装的 UC 执行任何您想要的操作。显示它,隐藏它,调用它的方法,打它的脸,等等。
标签: c# wpf xaml mvvm user-controls