MVVM ObservableCollection项目为字符串

时间:2017-05-25 09:28:16

标签: c# wpf

我正在使用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”。如果有更好的解决方案,请告诉我:)

1 个答案:

答案 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();
    }
}

enter image description here