gpt4 book ai didi

wpf - 使用命令绑定(bind)将数据从 View 发送到 View 模型

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

问题:
使用命令绑定(bind)时如何将数据发送到 View 模型?这样,例如,当我单击一个按钮时,它会发送列表的“当前选定的索引”,以便它可以对列表的该项目执行操作



更多的信息:
我正在开发一个程序,其中我有一个 cargo list ,每批 cargo 都有一个托盘 list 。我想制作一个按钮,允许我向当前选定的货件添加新托盘。 >编辑> 并通过另一个 Spanner 进入作品,每个托盘都有一个产品 list 。所以我不仅需要知道我在什么货件上,而且我还需要知道我在什么货件的哪个托盘上。

当我执行命令绑定(bind)时,我不知道如何将数据发送到 ViewModel。我想保留这个纯 MVVM,所以我不想让 ViewModel 检查 View 中的任何内容。

~N

编辑:
11/04/09 - 我删除了关于 ViewModel 实例化的问题部分。我将在另一个问题中再次问这个问题,因为这个问题正在解决另一个问题。我对这个问题做了一些其他的编辑,以明确我想要的方向。以及更改了一些语法位,以便当只有一个问题时它不是在谈论两个问题。

最佳答案

我通常从 View 模型中公开一个 CollectionView 并在 ItemsControl 上设置 IsSynchronizedWithCurrentItem 属性,以在 View 中显示列表。然后在执行命令时,我可以检查 CollectionView.CurrrentItem 属性以查看当前选择的内容。

编辑:这个答案解决了你的第一个问题,嗯,问题。而不是 您的看法将当前选定的项目发送到 ViewModel, ViewModel 跟踪当前选定的项目 .因此,使用这种技术,您无需弄清楚如何发送该信息。

在您的 View 模型中是这样的:

class ApplicationViewModel
{
// Exposes a list of ShipmentViewModels.
public CollectionView Shipments { get; private set; }

// A DelegateCommand or similar, that when executed calls AddPallet().
public ICommand AddPalletCommand { get; private set; }

void AddPallet()
{
ShipmentViewModel shipment = (ShipmentViewModel)Shipments.CurrentItem;
shipment.Pallets.Add(new PalletViewModel(...));
}
}

然后在你的 xaml 中:
<ListBox ItemsSource="{Binding Shipments}" IsSynchronizedWithCurrentItem="True"/>
<Button Command="{Binding AddPalletCommand}>Add Pallet</Button>

这样,您还可以跟踪从 ViewModel 中选择的 Shipments 集合并更新命令的 CanExecute 状态。

这有帮助吗?

关于wpf - 使用命令绑定(bind)将数据从 View 发送到 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1669587/

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