在DataContext

时间:2016-10-03 16:50:45

标签: c# wpf mvvm busyindicator

我是MVVM的新手,并尝试遵循我发现尊重它的所有指导方针。我想在我的一个用户控件上有一个Busy-Animation。我希望将它包含在这样的控件中。

它嵌套的Usercontrol在MainWindow上显示,使用ViewModel的DataTemplate,例如:

<Window.Resources>
    <DataTemplate DataType="{x:Type AppViews:AppConfigViewModel}">
        <local:AppConfigView />
    </DataTemplate>
</Window.Resources>

<Grid>
    <ContentControl Content="{Binding CurrentPageViewModel}" />
</Grid>

运行此应用程序时,将显示应用程序,我还会看到正确绑定的AppConfigViewModel视图,因为基础值在视图中正确显示。

现在我尝试在BusyAnimation的构造函数中注册ViewModel中的Busy-Animation(从那里控制它):

(DataContext as PageViewModel).BusyAnim = this;

由于某种原因,DataContext始终为null,并且此行的结果是异常。我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

我试图做的是反对MVVM的想法。 我尝试向下转换一个通用的对象。

我尝试实现的任务的一个更好的方法是在繁忙的动画组件中实现依赖项属性。这些意图从主要显示的视图的视图模型中绑定。这样,当viewmodel中的某些属性发生更改时,可以显示繁忙的动画。例如,这可能是一个名为&#34;工作&#34;的布尔。

这是我忙碌动画中的依赖属性代码:

slug

是的,它的代码很多,但我觉得wpf希望这样。请记住,上面的代码位于busy-animation用户控件中,并触发控制故事板的Start()Stop()函数。

在xaml下面是使用busyanimation的控件,将它绑定到一个viewmodel,busy-animation应指示后台工作:

id

ShowBusy属性有上面实现的依赖属性。当然,模型中的IsBusy应该遵循可观察的模式来使一切工作。

/ ps:我全面记录了我所犯的错误以及我是如何解决的。我可以摆脱以某种方式创建这个问题的负面因素吗?