C#体系结构:WPF UI绑定到非UI模型

C#体系结构:WPF UI绑定到非UI模型,c#,wpf,binding,C#,Wpf,Binding,我对C#和WPF比较生疏,所以请原谅我在这个问题上缺乏明确性 我将数据模型开发为类库,这样它就不会绑定到特定的UI框架,甚至任何UI。这是有充分理由的,因为该库可能用于支持多个UI实现 让我们假设它看起来像这样: public class MyDataStore { public string Title { get; private set; } public List<MyDataRecord> Records { get; private se

我对C#和WPF比较生疏,所以请原谅我在这个问题上缺乏明确性

我将数据模型开发为类库,这样它就不会绑定到特定的UI框架,甚至任何UI。这是有充分理由的,因为该库可能用于支持多个UI实现

让我们假设它看起来像这样:

public class MyDataStore
{
        public string Title { get; private set; }

        public List<MyDataRecord> Records { get; private set; }
}
公共类MyDataStore
{
公共字符串标题{get;private set;}
公共列表记录{get;private set;}
}
然后我有了一个用于查看和操作此数据模型的UI;让我们假设它是一个带有数据网格的WPF表单

现在您不能绑定到
列表
,这很好。 如果这完全是一个UI项目,我可以简单地将记录更改为一个
可观察集合
,但这不适合这个库-除了它的原理之外,我从一个工作线程更新列表,如果你不知道UI,你不能将该操作推到UI线程上

直接手动替换是维护每个列表项的事件订阅,并通过层次结构将其级联。或者,UI必须采用基于每个项目的订阅方式,这与当前it自上而下处理所有事情的状态不同


我可以想出一些可以解决这个问题的设计,但这一定是一个常见的问题:是否有合适的设计、模式或框架来获得绑定的好处和便利,同时保持不同的UI和模型分离?

或者创建实现INotifyPropertyChanged的代理类,以及可观察的集合(AutoMapper帮助在它们之间切换)

或者将这些特征直接添加到模型对象中


我通常将其添加到模型中,因为属性更改时的通知不是特定于UI的(是的,UI确实使用它,但将来可能需要在其他地方使用它,例如,如果子类更改了其值,您需要一个类来侦听)
如果您不了解UI,则无法将该操作推送到UI线程上。
-我已通过抽象
调度程序解决了这一问题。您还可以执行
任务工厂。FromCurrentSynchronizationContext()
Anways是在System.dll中定义的。我认为这与任何UI框架都没有关系。这个例子听起来像是你遇到的同一个问题:。他提出了两个解决方案,更有趣的是通过创建代理:对我个人来说,我只是在模型的属性上保留ObserviceCollection和属性通知。我明白了n个参数是双向的,但对我来说,它使事情变得简单。我找到了一个线程安全的实现。@jsirr13-谢谢你的评论,特别是我用来实现我想要的东西的链接。