gpt4 book ai didi

c# - WPF MVVM 我可以从 View 中使用模型吗

转载 作者:行者123 更新时间:2023-12-03 10:41:57 25 4
gpt4 key购买 nike

我还是 MVVM/WPF 的新手,在我的控制下,我创建了一个网格,当用户点击一行时,我希望它做一些事情。目前,我在我的代码中在 View 上执行了一些代码。这个可以吗?因为 View 需要从模型中访问数据,或者我怎样才能完全分离 View 和模型?

目前,我有这个...

// our View Window
public partial class MarketPriceView : UserControl
{
public MarketPriceView()
{
InitializeComponent();
}

private void OHLCChart_Click(object sender, RoutedEventArgs e)
{
// MarketPriceGrid is our model
var cell = GridData.SelectedItem as MarketPriceGrid;
string prod = cell.ProdCode;

// do something with prod ...
}
}

我的 XAML 我有一个数据网格
<DataGrid x:Name="GridData" ItemsSource="{Binding MarketPriceGrid}">
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="OHLC Chart" Click="OHLCChart_Click"/>
</ContextMenu>
</DataGrid.ContextMenu>
...
</DataGrid>

这个可以吗?或者我应该如何在不破坏 MVVM 模式的情况下进行操作?

最佳答案

OHLCChart_Click View 中的事件处理程序应替换为 ICommand您绑定(bind)到的 View 模型的属性:

<MenuItem Header="OHLC Chart" Command="{Binding ChartCommand"}/>

请引用 this有关如何在 MVVM 中处理事件的更多信息的博客文章。

您还应该绑定(bind) SelectedItem DataGrid 的属性(property)到 View 模型的源属性:
<DataGrid x:Name="GridData" ItemsSource="{Binding MarketPriceGrid}"
SelectedItem="{Binding TheSelectedItem}">

然后,您将可以直接访问 Execute 中当前选定的项目。 View 模型中的命令方法:
_clickCommand = new DelegateCommand<object>(
(s) => { /* do something with this.TheSelectedItem */ }, //Execute
(s) => true //CanExecute
);

这样,您将应用程序逻辑从 View 移动到它所属的 View 模型,并且可以在不存在 View 的情况下单独测试和发展。

请注意,那里有 MVVM 框架,例如 PrismMvvmLight ,为 ICommand 提供实现和其他 MVVM 相关的东西,让你的生活更轻松。

关于c# - WPF MVVM 我可以从 View 中使用模型吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58338252/

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