【发布时间】:2013-02-17 08:46:59
【问题描述】:
我希望用户能够在 10 个或更多唯一的用户控件之间进行选择,并以任意顺序将它们显示在一个列表中,其中包含任意数量的任何用户控件的多个实例。因此,列表可能如下所示 UC1、UC1、UC3、UC3、UC 10、UC8 等。需要注意的是,前面示例中的两个 UC1 和两个 UC3 是具有不同关联值的不同实例。本质上,我正在创建一系列命令,并将其解析为真实世界的动作。
问题:我无法将 ListView 中显示的 UserControls 绑定到 ObservableCollection 中的数据。至少,我在 UserControls 中的绑定是错误的,我不知道如何让它们工作。
我正在使用 MVVMLight。我有一个 Window 控件,它只包含一个内容控件,该控件加载了一个名为 CommandView 的 UserControl,这是我的主要显示。 CommandView 目前有几个按钮,其属性绑定到 CommandViewModel 中的中继命令,这些命令将唯一的类实例添加到称为 CommandsCollection 的 ObservableCollection。 ListView 绑定到封装 CommandsCollection 的属性。
我在后面的代码中使用 DataTemplate 和 DataTemplateSelector 根据集合中该位置的类类型选择正确的 UserControl(UC1、UC2 等)。我已经成功地工作了,但是我没有将显示的 UserControl 文本框绑定回 ObservableCollection,因此在 UserControl 的文本框中没有显示任何数据。我确实在 ObservableCollection 中设置了类属性的默认值,并将集合写入文本文件并查看这些值是默认值。所以 ObservableCollection 正在查看这些值。
如何在用户控件中设置绑定?这是我在 UC1 用户控制中的内容:
<lightext:UserControl
DataContext="{Binding VelocityCommandStatic, Source={StaticResource Locator}}">
<TextBox Text="{Binding VelocityCommandProperty.VelocityKinematic,
UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
VelocityCommandStatic – 实际上我也对此有点困惑,但这是在 viewmodellocator.cs 中创建的用户控件的对象(?)。
什么是最好的绑定方式? xaml 绑定点可以直接回到 ObservableCollection 吗?一个问题是,每个 UserControl 都有不同的属性,我为集合中的每个用户控件放置了不同的类(实例)。我会知道这些属性,但需要在 xaml 中正确设置它们。也许这种方法并不理想。我可以在视图模型中将 UserControl 的属性指向 CommandViewViewModel 中 observablecolleciton 中的正确位置吗?
【问题讨论】:
标签: c# wpf listview mvvm-light observablecollection