c# - 可观察模型中的 IEnumerable

标签 c# wpf ienumerable observablecollection

我处于必须使用现有模型的情况,而我不允许更改现有属性。

public class Car : ModelBase
{
    private string _model;
    public string Model
    {
        get { return _model; }
        set { this.Update(x => x.Model, () => _model= value, _model, value); }
    }

    private IEnumerable<Person> _allowedDrivers;
    public IEnumerable<Person> AllowedDrivers
    {
        get { return _allowedDrivers; }
        set { this.Update(x => x.AllowedDrivers, () => _allowedDrivers=value, _allowedDrivers, value); }
    }
}

现在我们最近开始实现 WPF UI,我需要使用这些现有模型。有什么方法可以使用 IEnumerable 并让它像 ObservableCollection 一样工作而无需真正更改它?我有什么选择。

问题是我删除了一个 AllowedDriver,然后添加了一个 AllowedDriver,但 UI 根本没有更新。这是合乎逻辑的,然后我(出于测试目的)将 IEnumerable 设为 ObservableCollection,然后 UI 就可以工作了。我是否有任何其他选项可以继续使用 IEnumerable 但会更新?

最佳答案

Is there any way I can use the IEnumerable and let it work like a ObservableCollection without changing it really?

您可以创建另一个继承Car 类的。由于您的 ObservableCar 继承了 Car 类,您可以访问 AllowedDrivers 属性。

因此,您可以声明所需的 observable 集合并使用从 AllowedDrivers 转换而来的 observable 集合进行初始化。此初始化应在 get 内。

public class ObservableCar: Car {
    public ObservableCar(){
         _observableAllowedDriver = new ObservableCollection<Person>(AllowedDrivers);
    }
    private ObservableCollection<Person> _observableAllowedDriver;
    public ObservableCollection<Person> ObservableAllowedDriver
    {
        get { return _observableAllowedDriver; }
    }
}

关于c# - 可观察模型中的 IEnumerable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48338330/

相关文章:

c# - 如何实现定义另一个接口(interface)元素的接口(interface)

c# - 删除文件但不删除文件夹 C#

c# - WPF 中的上下文文本编辑器

c# - 这个模型工厂如何知道使用哪种方法?

wpf - 如果只有一项,如何隐藏组合框切换按钮?

c# - 将 List<object> 绑定(bind)到 Datagrid WPF,C#

c# - 如何将 IEnumerable<IEnumerable<T>> 转换为 List<string>?

c# - 有人可以想出这个枚举器的更好版本吗?

c# - 如何使用 C# 从虚拟目录创建 HTTP 重定向

c# - 使用生产者/消费者模式和 SqlBulkCopy 将平面文件分块处理到 SQL Server 数据库中