我正在使用PRISM6。 在我的模型中,我很简单:
public ObservableCollection<Id> Ids { get; }
在ViewModel中,我想在public ObservableCollection<string> Ids
如何将其转换为字符串?这时我有:
private ObservableCollection<string> _ids = new ObservableCollection<string>();
public ObservableCollection<string> Ids {
get {
_ids.Add("Empty");
foreach (var item in _Model.Ids) {
_ids.Add(item.ToString());
}
return _ids;
}
}
但是当我在Model中更新我的集合时,它不起作用。
我的旧版本没有转换工作正常。 public ObservableCollection<Id> Ids => _Model.Ids;
我需要在字符串中,因为我需要在组合框中添加“Empty”。如果有更好的解决方案,请告诉我:)
答案 0 :(得分:0)
我确信那里有更好的解决方案,但这是我特别喜欢的一种方法:
public class MainViewModel
{
// Source Id collection
public ObservableCollection<Id> Ids { get; }
// Empty Id collection
public ObservableCollection<Id> Empty { get; } = new ObservableCollection<Id>();
// Composite (combination of Source + Empty collection)
// View should bind to this instead of Ids
public CompositeCollection ViewIds { get; }
// Constructor
public MainViewModel(ObservableCollection<Id> ids)
{
ViewIds = new CompositeCollection();
ViewIds.Add(new CollectionContainer {Collection = Empty });
ViewIds.Add(new CollectionContainer {Collection = Ids = ids });
// Whenever something changes in Ids, Update the collections
CollectionChangedEventManager.AddHandler(Ids, delegate { UpdateEmptyCollection(); });
UpdateEmptyCollection(); // First time
}
private void UpdateEmptyCollection()
{
// If the source collection is empty, push an "Empty" id into the Empty colleciton
if (Ids.Count == 0)
Empty.Add(new Id("Empty"));
// Otherwise (has Ids), clear the Empty collection
else
Empty.Clear();
}
}