.net 将代码保留在视图中是不是不好?

.net 将代码保留在视图中是不是不好?,.net,wpf,xaml,mvvm,.net,Wpf,Xaml,Mvvm,我试着读这篇文章,但我不能完全理解 然而,我注意到这样的指导方针: 这就是您的View.xaml.cs,它应该几乎没有代码 我应该如何修复下面的代码?我应该将WCF代码提取到其他地方吗?谢谢 // ///MainWindow.xaml的交互逻辑 /// 公共部分类主窗口:窗口 { 公共主窗口() { 初始化组件(); } 已加载私有无效窗口(对象发送器、路由目标) { 管道工厂= 新渠道工厂( 新建NetNamedPipeBinding(), 新端点地址( “净。pipe://localhos

我试着读这篇文章,但我不能完全理解

然而,我注意到这样的指导方针:

这就是您的View.xaml.cs,它应该几乎没有代码

我应该如何修复下面的代码?我应该将WCF代码提取到其他地方吗?谢谢

//
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
}
已加载私有无效窗口(对象发送器、路由目标)
{
管道工厂=
新渠道工厂(
新建NetNamedPipeBinding(),
新端点地址(
“净。pipe://localhost/PipeManagementConsole"));
IManagementConsole管道代理=
CreateChannel();
列表数据=新列表();
foreach(pipeProxy.GetStrategies()中的StrategyDescriptor sd)
{
Add(pipeProxy.GetData(sd.Id));
}
dataGrid1.ItemsSource=数据;
}
}

是的,这是一种不好的做法,尤其是从不同的角度来看

将所有业务逻辑提取到ServiceViewModel类中,在视图中,只需将ViewModel的实例设置为DataContext:

public主窗口()
{
初始化组件();
this.DataContext=newServiceViewModel();
}
如果有其他类/窗口实例化此窗口,则应在其中设置ViewModel。例如:

mywindowchildwindow=newmywindow();
childWindow.DataContext=新的ServiceViewModel();
现在您可以看到MVVM正在运行,在MainWindow XAML文件中,您可以使用如下绑定:


通过这种方式,您的逻辑保持在ViewModel中,并与视图解耦

附言:

我建议对ConsoleData列表使用
ObservableCollection
,好处如下:()

可观察收集类

表示动态数据集合,该集合在以下情况下提供通知: 添加、删除项目,或刷新整个列表时删除项目


为什么视图中有WCF代码?这看起来像是非常糟糕的设计…看起来像是重复的感谢,我可以在xaml中设置DataContext并删除这最后一行代码吗?如何实现ServiceViewModel?欢迎链接到相应的文档。@javapowered:请参阅刚刚更新的答案,基本上您的ViewModel应该公开
observeCollection数据项
,然后只需将其绑定到XAML中,如回答中所示。是的,您可以在XAML中设置数据上下文。您需要在参考资料部分添加名称空间引用并创建ViewModel类的实例。然后将DataContext绑定到该资源。