据我所知,使用绑定到列表视图的ObservableCollection的默认方法是将模型类作为元素(com.ExecuteReader();
)。因此,当选择一个listview元素时,我们使用NavigateAsync并传递模型,然后ViewModel可以使用该模型“填充自身”。
这种方法的问题在于,无法在列表视图中使用ViewModel属性进行绑定。
例如: 我有一个View,ViewModel和Model“ PickList”,其中包含“ PickLine”对象的集合-每个对象都有一个View,ViewModel和Model本身。 PickLine对象包含属性“ PickedQuantity”和属性“ OpenQuantity”。现在,在我的PickList视图中,我不想将这两个绑定到单独的项目(例如,两个标签),但是我想要一个标签来同时显示这两种格式,例如“ PickedQuantity / OpenQuantity”。我知道可以通过使用多重绑定或类似的方法来解决此示例。但这不是全部的意思。 我的PickLine ViewModel已经具有“ QuantityString”属性,我想通过DataTemplate绑定到listview元素的标签。但是我该怎么做。甚至有可能吗?
答案 0 :(得分:0)
使一个属性结合其他两个属性并绑定到该属性。例如:
公共字符串FullQuantity {获取{返回$“ {PickedQuantity} / {OpenQuantity}”;}}
然后在PickedQuantity
和OpenQuantity
的setter中,您将要调用已设置的任何PropertyChanged
方法,以通知属性更改绑定并传递{{ 1}}属性名称,以便在更改FullQuantity
或FullQuantity
时更新绑定到PickedQuantity
的元素。
这样,您只需将一个标签的文本绑定到一个属性,并且当更改两个数量属性中的任何一个时,该标签将被更新。
注意:我不熟悉Prism,但是不管使用哪种Mvvm框架,这种方法都应该有效。
答案 1 :(得分:-1)
您的PickListViewModel
应该公开一个集合属性,该属性的项目类型为PickLineViewModel
(不是 PickLine
)。
是否需要ObservableCollection<PickLineViewModel>
取决于发生更改的位置-在最初创建PickLine
的服务/模型中还是在GUI中,或者在这两者中。无论如何,您都必须确保更改从一侧(视图模型的集合)传播到另一侧(模型的集合)。 Google wrapping observable collection
作为入门工具(提示:如果可能,请避免双向同步)。这些blog posts很旧,但仍然很实用,可以很好地阅读。 this answer中描述了一个简单的包装。