这里视图模型的名字是什么
本文关键字:是什么 视图 模型 这里 | 更新日期: 2023-09-27 18:14:55
我有这段代码:
public partial class MainWindow : Window
{
public CViewModel ViewModel { get; set; }
public MainWindow()
{
try
{
InitializeComponent(); // create VM first time
try
{
ViewModel = new CViewModel(); // create VM 2nd time
ViewModel.topGrid = TopGrid;
在相应的XAML中,我有这个:
<Window
.....
xmlns:c="clr-namespace:CCalc"
....
x:Class="CCalc.MainWindow"
....>
<Window.DataContext>
<c:CViewModel />
</Window.DataContext>
我可以看到CViewModel实例被创建两次:一次是由XAML代码创建的,因为InitializeComponent,一次是由new CViewModel()创建的。我擦掉这行代码。但是如何设置topGrid呢?换句话说:作为数据上下文的视图模型的名称是什么?
您可以为一个普通类创建任意数量的实例。这两个视图模型实例是不同的。你想用哪一个由你决定。
要设置topGrid,必须在代码中访问ViewModel。这可以通过两种方式完成:
// using the one declared in xaml file
CViewModel vm = (CViewModel)this.DataContext;
vm.topGrid = TopGrid;
// using a new one
CViewModel vm = new CViewModel();
vm.topGrid = TopGrid;
this.DataContext = vm;
将ViewModel
属性更改为:
public CViewModel ViewModel
{
get { return DataContext as CViewModel; }
set { DataContext = value; }
}
在main中,你可以这样做:
public MainWindow()
{
InitializeComponent();
ViewModel = new CViewModel();
ViewModel.topGrid = TopGrid;
}
您可以使用数据上下文
访问视图模型(this.DataContext as CViewModel).topGrid = TopGrid;
你可以先测试一下,以确保它不是null。
CViewModel model = (this.DataContext as CViewModel);
if (model != null)
{
model.topGrid = TopGrid;
}
您应该将dataContext
设置为new CViewModel
public partial class MainWindow : Window
{
public CViewModel ViewModel { get; set; }
public MainWindow()
{
try
{
InitializeComponent(); // create VM first time
try
{
DataContext = new CViewModel();
然后作为@Xaruth说调用
(this.DataContext as CViewModel).topGrid = TopGrid;