gpt4 book ai didi

.net - 将代码保留在 View code 后面是不是很糟糕?

转载 作者:行者123 更新时间:2023-12-02 04:05:14 25 4
gpt4 key购买 nike

我尝试阅读文章 WPF/Silverlight: Step By Step Guide to MVVM但我不能完全理解。

但是我注意到了这样的指导方针:

That is your View.xaml.cs that is supposed to have almost no code.



我应该如何修复下面的代码?我应该将我的 WCF 代码提取到另一个地方吗?谢谢。

/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

private void Window_Loaded(object sender, RoutedEventArgs e)
{
ChannelFactory<IManagementConsole> pipeFactory =
new ChannelFactory<IManagementConsole>(
new NetNamedPipeBinding(),
new EndpointAddress(
"net.pipe://localhost/PipeManagementConsole"));

IManagementConsole pipeProxy =
pipeFactory.CreateChannel();

List<ConsoleData> datas = new List<ConsoleData>();
foreach (StrategyDescriptor sd in pipeProxy.GetStrategies())
{
datas.Add(pipeProxy.GetData(sd.Id));
}
dataGrid1.ItemsSource = datas;
}
}

最佳答案

是的,这是一种不好的做法,尤其是来自 MVVM观点。

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

 public MainWindow()
{
InitializeComponent();
this.DataContext = new ServiceViewModel();
}

如果您有其他类/窗口正在实例化此窗口,则应在其中设置 ViewModel。例如:

MyWindow childWindow = new MyWindow();
childWindow.DataContext = new ServiceViewModel();

所以现在您可以看到 MVVM 的运行情况,在 MainWindow XAML 文件中您可以使用如下绑定(bind):

<!-- Considering that ServiceViewModel has 
public string ServiceName property
-->
<TextBlock Text="{Binding ServiceName}" />

<!-- Considering that ServiceViewModel has
public List<ConsoleData> DataItems property
-->
<DataGrid ItemsSource="{Binding DataItems}" />

通过这种方式,您的逻辑将保留在 ViewModel 中并与 View 解耦。

PS:

我建议使用 ObservableCollection<ConsoleData>对于 ConsoleData 列表,好处是:( MSDN )

ObservableCollection Class

Represents a dynamic data collection that provides notifications when items get added, removed, or when the whole list is refreshed.

关于.net - 将代码保留在 View code 后面是不是很糟糕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8099731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com