gpt4 book ai didi

c# - 为 ItemsControl 的每一项创建一个 ViewModel

转载 作者:行者123 更新时间:2023-12-03 10:27:45 33 4
gpt4 key购买 nike

我定义了一个类型 董事会 其中包含公共(public)属性(property)

ObservableCollection<Column> Columns

我想使用 MVVM 模式来显示它。
我创建了 看板并将其绑定(bind)到 BoardViewModel . BoardViewModel 公开公共(public)属性 董事会 板型。
BoardView 包含一个控件 ItemsControl,它设置 ItemsSource={Binding Board.Columns}。
<ItemsControl ItemsSource="{Binding Board.Columns}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderThickness="2" Margin="10" BorderBrush="#9f9f9f" Width="250">
<v:BoardColumnView Background="#e3e3e3" />
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>

BoardColumnView 应该显示 的属性专栏 类型,这很好用。
我的问题是我想为 BoardColumn 创建一个 ViewModel,而不是只显示 Column 类型的属性,我想显示 BoardColumnViewModel 这将在 中定义专栏 属性(property)。
我怎样才能做到这一点?
提前致谢!

最佳答案

你可以简单地定义一个 Columns您的 BoardViewModel 中的属性(property)将包含 BoardColumnViewModel 的集合.像这样的东西:

public ObservableCollection<BoardColumnViewModel> Columns { get; private set; }

您需要在 BoardViewModel 中的某处初始化此属性。 , 例如:
public BoardViewModel(...)
{
...
Columns = new ObservableCollection<BoardColumnViewModel>(Board.Columns.Select(c => new BoardColumnViewModel(c)));
}

然后绑定(bind)到该属性,而不是 Board.Columns :
<ItemsControl ItemsSource="{Binding Columns}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderThickness="2" Margin="10" BorderBrush="#9f9f9f" Width="250">
<v:BoardColumnView Background="#e3e3e3" />
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

作为 MVVM 的一般原则,不建议直接绑定(bind)到模型。相反,您应该始终尝试绑定(bind)到 View 模型。这就是您遇到所描述问题的原因 - 因为您绑定(bind)到公共(public)属性 Board ,这是你的模型。

关于c# - 为 ItemsControl 的每一项创建一个 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31526675/

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