使用 MVVM 设计模式为控件分离数据对象变量

Separate dataobject variables for controls using MVVM design pattern

假设我们有一个包含两个值 CompanyIDPrice 的数据对象。我还有多个控件,根据 CompanyID 应该更新 Price.

有四个布局相同的网格,每个布局都包含一个 <TextBlock/> 控件。所有控件共享相同的变量 (Price)。如果我将 <TextBlock Text="{Binding Price}"/> 放在四个布局中的每一个中,相同的值将在每个控件上更新。它应该只更新一个 <TextBlock/>,具体取决于给定的 CompanyID。价格将在运行时更新。

在模型视图构造函数中:

PriceObj = new Model(CompanyID, Price);

对象将存储在 modelView 拥有的 属性 (PriceObj) 中。

区分哪个控件应更新关于 CompanyID 值的 Price 值的最佳做法是什么?

为每个公司创建不同的 Price 会更好吗,假设 Price0, Price1 然后通过 XAML?

中的 DataBinding 直接访问这些值

能否在INotifyPropertyChanged接口实现中进行区分?

注意:我不想要最简单的方法,我想要最适合 MVVM 模式的方法。代码示例将不胜感激。

如果您有 100 家公司,并且每家公司都有自己的价格,那么生产 Price0...Price99 属性的效率非常低。这不是关于 MVVM,这是关于常识。

显然,要走的路是视图模型级别的 PriceObj 和视图级别的 ItemsControl 的集合。像这样:

public PriceObj
{
    public int CompanyID { get; set; }
    public decimal Price { get; set; }
}

public class PriceEditorViewModel
{
     public ObservableCollection<PriceObj> Prices { ... }
     /* ... */
}

XAML:

<ListBox ItemsSource="{Binding Prices}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding CompanyID}"/>
                <TextBox Text="{Binding Price}"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

ItemsControl(示例中的 ListBox)为 ItemsSource 中的每个项目生成一组单独的控件。在上面的标记中,控件是使用 DataTemplate 定义的(更多关于数据模板 here)。

我不完全理解你的问题,但我想你有公司列表和他们的价格,你想在有人选择公司时显示价格? 如果是这样,我会创建 2 个网格,一个用于公司,另一个用于价格。 我还会在视图模型中创建公司和价格列表,每当有人选择公司时,我都会在视图模型中过滤价格列表。

可能是我看不懂你的qq