Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ViewModel中执行什么操作以及在xaml.cs文件中执行什么操作_C#_.net_Xaml_Mvvm_Uwp - Fatal编程技术网

C# 在ViewModel中执行什么操作以及在xaml.cs文件中执行什么操作

C# 在ViewModel中执行什么操作以及在xaml.cs文件中执行什么操作,c#,.net,xaml,mvvm,uwp,C#,.net,Xaml,Mvvm,Uwp,我试图通过创建一个UWP项目来学习MVVM模型。从我收集的信息来看,ViewModel应该独立于实际视图(便携?)。我只是想澄清一下我的理解是否正确 假设我有一个SplitView: <Grid> ... <Button Click="ActivateRelativePanel Content="CLICK!"/> <SplitView> <SplitView.Pane>

我试图通过创建一个UWP项目来学习MVVM模型。从我收集的信息来看,ViewModel应该独立于实际视图(便携?)。我只是想澄清一下我的理解是否正确

假设我有一个
SplitView

<Grid>
    ...
    <Button Click="ActivateRelativePanel Content="CLICK!"/>       
    <SplitView>
        <SplitView.Pane>
            ...
        </SplitView.Pane>
        <SplitView.Content>
            <Frame Name="MyFrame"/>
        </SplitView.Content>
    </SplitView>
</Grid>

...
嗯,有几件事:

  • MVVM模式允许您将视图和业务逻辑解耦。有很多优点,其中之一就是测试。您可以在不考虑视图的情况下测试视图模型,因为它是独立的(您的视图模型没有任何视图意识)。分离关注点也是组织代码的一个很好的实践

  • 从这一点开始,您应该在代码中尽可能少的代码后面放置。可接受的代码是专门操纵UI元素的代码,如调整大小、管理动画等。。。所有与数据和其他内容相关的内容都应该直接进入视图模型

  • 导航也应该从视图模型处理,因为逻辑发生在那里,导航依赖于逻辑

对于你的IsOpenPane案件,这是一个有争议的话题。它操纵UI元素,但我怀疑它是从业务逻辑操纵的。因此,就我个人而言,我会在视图模型中声明一个公共属性,并将其绑定到xaml属性IsPaneOpen

关于UWP MVVM指南,您应该看到

它不仅适用于UWP,而且资源非常古老,但概念是相同的(只有一些XAML元素不同,但模式和精神完全相同)

但最重要的是:

微软MVA真的很棒


一旦您能够轻松使用XAML和MVVM,请参阅。这是微软关于UWP和设计的官方文档,在这里你可以掌握一些关键概念,如响应式设计技术(这是UWP特有的,并提供了一些工具,使通用应用程序可以在任何显示器上使用,从物联网到电视)。当然,它写得很好,结构也很好。

非常翔实,谢谢!我想我已经看到了那个页面,但我想我可能会找到一个不同的UWP特定指南。不过,既然它们都很相似,我就来看看那个链接!非常感谢您的回复@不客气!我添加了一个指向MicrosoftMVA的链接,从零开始非常棒。