【发布时间】:2020-04-17 12:10:06
【问题描述】:
在我的应用程序中,我有以下 MasterViewModel1-class。
public class MasterViewModel1 : ViewModelBase
{
private ObservableCollection<ObservableObject> _MainGrid;
public ObservableCollection<ObservableObject> MainGrid
{
get => _MainGrid;
set
{
_MainGrid = value;
RaisePropertyChanged();
}
}
public ObservableCollection<FilterItem> FilterItems
{
get;
set;
}
public MasterViewModel1()
{
CreateDefaultMenu();
}
public void CreateDefaultMenu()
{
FilterItems = new ObservableCollection<FilterItem>
{
new FilterItem(OnFilterClicked)
{
Content = "Filter"
},
new FilterItem(OnFilterCancelClicked)
{
Content = "Filter aufheben"
}
};
}
public virtual void OnFilterClicked() { }
public virtual void OnFilterCancelClicked() { }
MasterViewModel1 类由 TestViewModel 类继承。
public class TestViewModel : MasterViewModel1
{
private Kunde _NeuerKunde;
public Kunde NeuerKunde
{
get => _NeuerKunde;
set => _NeuerKunde = value;
}
private string _Kundenmatchcode;
public string Kundenmatchcode
{
get => _Kundenmatchcode;
set
{
_Kundenmatchcode = value;
RaisePropertyChanged();
}
}
public TestViewModel()
{
NeuerKunde = new Kunde();
}
}
出于可重用的原因,我使用 MasterViewModel1 类及其视图,因为将来会有更多的视图继承 MasterViewModel。
在需要绑定到 MasterViewModel 的 MasterView 内部,所以我有“Base-Design”。 我需要绑定到“Sub”ViewModel,在这个例子中是 TestViewModel。
在图片中您可以看到 MasterView。红色标记的区域是应该放置TestViewModel(TestView)的地方。我不能使用静态资源!!!它必须是动态的,所以如果我实例化另一个 ViewModel,它也继承自 MasterViewModel1。红色标记的区域应根据实例化的 ViewModel 发生变化。
我希望它足够清楚。 如果您需要更多信息,请询问。
【问题讨论】:
-
您没有显示 xaml,问题也没有解释您究竟绑定了什么。什么是“基础设计”?红色区域显示什么以及何时应该更改?见minimal reproducible example。
-
通常,超类的所有公共属性都是可见的,并且可以通过每个子类访问。您可以绑定到每个公共属性。如果您想根据实际实现或类型更改视图的布局或外观,您应该使用
DataTemplate,它描述了视图的结构和绑定到模型数据的方式。
标签: c# wpf mvvm binding viewmodel