c# - Model/ViewModel 设计中的类继承错误

标签 c# wpf inheritance mvvm

我正在尝试将我的 C# WPF 应用程序从非 MVVM“移植”到 MVVM,但我正在努力处理类的继承。

我在我的模型中建立了一些层次结构:

银行包含一组补丁,其 IsSelected 绑定(bind)到银行 ListView 。

public abstract class Bank: ObservableCollectionEx<Patch>
{
    ...
    bool _isSelected;
    public bool IsSelected
    {
        get { return _isSelected; }
        set { if (value != _isSelected) { _isSelected = value; OnPropertyChanged(new PropertyChangedEventArgs("IsSelected")); } }
    }
    ...

补丁定义如下。唯一有趣的类(对于这个问题)是 ObservableObject。
public abstract class Patch : ObservableObject, IComparable<Patch>, INavigation, IParameter
{
...

ObservableCollection 定义为:
public class ObservableCollectionEx<T> : ObservableCollection<T> where T : ObservableObject
{

ObservableObject 定义为:
public abstract class ObservableObject : INotifyPropertyChanged
{
...

在我的 ViewModel 中,我需要一个选定银行的列表,所以我定义了它们:
public ObservableCollectionEx<Bank> Banks
{
    get ...

然而,这给出了一个错误:

类型“PcgTools.Synths.Common.Synth.Bank”不能用作泛型类型或方法“ObservableCollectionEx”中的类型参数“T”。没有从“PcgTools.Synths.Common.Synth.Bank”到“ObservableObject”的隐式引用转换。 G:\Data\Eigen\Informatica\KorgKronosTools\KorgKronosTools\ViewModels\PcgViewModel.cs 152 45 PcgTools

我(认为)我需要这种结构,因为:

Bank 的 IsSelected 属性绑定(bind)到(银行) ListView (显示所有银行)。可以选择多个银行。所以银行应该支持 INotifyPropertyChange(ObservableObject 这样做)。
  • Patch 的 IsSelected 属性绑定(bind)到另一个 ListView (同一窗口中的补丁 ListView )。补丁也可以(多选)。
  • 第一个选定库的补丁显示在补丁 ListView 中。
  • 当第一个选定的银行被更改时,我应该重新填充补丁 ListView ,所以我需要 Bank 类来支持 ObservableCollection(Ex)。
  • 补丁只需要支持INotifyPropertyChange(ObservableObject)。
  • 我宁愿使用 ObservableObject 而不是 INotifyPropertyChanged,因为它提供了一些不错的额外方法(用于验证)。
  • 最佳答案

    我的第一个问题是你为什么要这样做?但是,如果您确实需要,那么听起来对您的通用约束的唯一要求是该类型实现 INotifyPropertyChanged :

    public class ObservableCollectionEx<T> : ObservableCollection<T> where T : INotifyPropertyChanged
    

    你不需要实现 INotifyPropertyChangedBankObservableCollection<T> 实现的类型

    您最好创建自己的接口(interface)(继承自 INotifyPropertyChanged )并拥有您需要访问的方法。然后使用该自定义接口(interface)作为泛型类型的约束,并在 ObservableObject 中实现它和 ObservableCollectionEx .

    关于c# - Model/ViewModel 设计中的类继承错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9370135/

    相关文章:

    c# - 在 Entity Framework 中使用 2 个 DbContext 回滚事务。使用 TransactionScope 还是 TransactionBegin?

    c# - MaterialDesign 多个对话框

    WPF - 如何在水平方向的堆栈面板内右对齐文本 block ?

    javascript - 继承问题

    java - 有没有办法将 "override"本质上作为最终变量?

    c# - 如何使用 BouncyCaSTLe 生成根证书,然后生成由该根证书签名的站点证书?

    c# - 随机种子 c# - 如何为调试生成相同的数字序列

    c# - 如何将导出的 View 放置到另一个导出的 View 的特定位置?

    wpf - 通知 DevExpress 数据网格中 View 上的模型属性发生更改

    javascript - 如何为 NodeJS 中的自定义错误类获取正确的回溯?