我正在为插件编写接口。我具有自定义的Control,一个MainViewModel和一个我保存并加载的Settings类。 在这些设置中,我有一个实体列表,基本上我只是想提供自定义控件,其余的(图标,可用实体等)完成。现在,这一切都可以在我的代码中正常运行,唯一的问题是,是否保存设置取决于我在MainViewModel中设置的标志(插件限制)。通过ObservableCollection,我注意到何时添加和删除实体,而不是何时更改实体的值。
我的基本截断版式:
public class MainViewModel : INotifyPropertyChanged
{
//This Property gets serialized and deserialized
public MySettings Settings { get;set; }
//With Settings.PropertyChanged handling
//I kinda want to keep this lightweight for abstraction/inheritance reasons.
}
[DataContract]
public class Entity
{
//Other Data
[DataMember]
public bool IsInverted{ get;set; }
}
[DataContract]
public class MySettings : INotifyPropertyChanged
{
private ObserverableList<EntityModel> entities;
[DataMember]
public ObserverableList<EntityModel> Entities
{
get => entities;
set
{
if (entities == value) return;
entities = value;
entities.CollectionChanged += (a,b) => OnPropertyChanges(nameof(Entities));
}
}
}
public partial class EntityListControl : UserControl, INotifyPropertyChanged
{
//DependencyProperties
//This property is bound to the MainViewModel.Settings.Entities
public ObservableCollection<CameraModel> CameraList
{
get => (ObservableCollection<CameraModel>)GetValue(CameraListProperty);
set => SetValue(CameraListProperty, value);
}
public ObservableCollection<CameraViewModel> CameraViewModels { get; set; }
//Add/RemoveCommands connecting model list with viewmodel list.
}
public class EntityViewModel : INotifyPropertyChanged
{
private Entity model;
//Properties => model.Property
//Other data like images and names not saved
}
再加上一个xaml控件,该控件具有一个列表,其中包含用于布尔值和其他内容的复选框。
要注意到Entity属性何时更改,最明显的解决方案是使用INotifyPropertyChanged增强Entity,但这基本上意味着我有两个相同模型的ViewModel(是否破坏了MVVM?)。 因此,我想知道是否有另一种方法可以执行此操作,而我不需要几秒钟的ViewModel,还是将EntityViewModel List(和周围的代码)封装到MainViewModel中而不将各种命令绑定到and的好方法从UserControl中(添加/删除)。