gpt4 book ai didi

xaml - MVVM 数据模板和非直接数据映射

转载 作者:行者123 更新时间:2023-12-02 00:30:17 24 4
gpt4 key购买 nike

我一直在使用 mvvm 开发 RIA 服务 sl4 应用程序,我似乎遗漏了一些东西。

当您的数据以预期的编辑格式出现或当您的数据对象“适合 View ”(网格、列表等)时,MVVM 和数据绑定(bind)工作得很好。但是,当您的数据没有真正直接映射时会发生什么?

我的例子

假设我有一个产品表,它定义了产品的价格和选项。我有一个订阅的产品表,它将链接产品和客户,还有关于订阅何时结束等的数据......

所以当我开始研究“购物 list ”的 View 时,我这样做了:

    <ListBox x:Name="ShopList" Grid.Row="0" ItemsSource="{Binding Products}">
<DataTemplate>
<StackPanel Orientation="Horizontal">
<sdk:Label Content="{Binding ModuleName}" />
<sdk:Label Content="{Binding DateStart, Converter={StaticResource gridDateFormatter}}" />
<sdk:Label Content="{Binding DateEnd, Converter={StaticResource gridDateFormatter}}" />
<telerik:RadMaskedTextBox MaskedText="{Binding UnitsToBuy}" />
<sdk:Label Content="{Binding UnitStep}" />
<sdk:Label Content="{Binding TotalPrice}" />
</StackPanel>
</DataTemplate>
</ListBox>

所以我认为我要将 ItemsSource 与我的 ViewModel 上的 Observable 集合绑定(bind)

public ObservableCollection<Product> Products

但现在我遇到了一个问题,UnitsToBuy 不在产品中,也不属于产品。我正在努力寻找一种干净的方法来处理这些场景。假设我可以在该列表中包含任意数量的项目。

谢谢。

最佳答案

我认为您的问题归结为 View 需要具有更多属性的 View 模型,而不是简单的模型。为什么没有这样的东西。显然下面的类应该实现 INotifyPropertyChanged。

public class CartItem
{
public Product Product {get;set;}
public int UnitsToBuy {get;set;}
public int UnitsStep {get;set;}
public decimal TotalPrice
{
get { return Product.Price * UnitsToBuy;}
}
//more properties can be added if needed
}

public class ShoppingCartViewModel
{
public ObservableCollection<CartItem> Products {get;set;}
}

然后在 xaml 中您实际上不需要进行任何更改。

关于xaml - MVVM 数据模板和非直接数据映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7243503/

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