我从控制台应用程序启动了WPF窗口。但是我在数据绑定方面遇到困难。
TL; DR:是否可以在WPF XAML中引用特定的(视图)模型对象?
这是我的代码:
Console.cs
控制台应用程序通过void Main()
函数中的静态函数启动视图
static void StartGUI(ViewModelClass viewmodel)
{
Thread thread = new Thread(() => { new Application().Run(new View.MainWnd(viewmodel)); });
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
它获取已在Main()
中启动的viewmodel对象。
ViewModel.cs 视图模型是INotifyPropertyChanged接口的通常实现,带有要绑定到视图的属性。
using System;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using ConsoleStartsGUI.Model;
namespace ConsoleStartsGUI.ViewModel
{
public class ViewModelClass : INotifyPropertyChanged
{
ModelClass model = new ModelClass();
public string VMProperty
{
get { return model.TestProperty; }
set
{
model.TestProperty = value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] String propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
View.xaml 在视图中,我遇到了问题:该视图应该与控制台应用程序具有相同的视图模型。
当前我使用
<Window.DataContext>
<ViewModel:ViewModelClass/>
</Window.DataContext>
将viewmodelclass绑定到视图(这是我在VS设计器中单击的结果),因为当我从一开始就使用WPF项目时,通常会起作用。但这会实例化一个新对象,该对象不是控制台应用程序的对象。
View.xaml.cs
using System.Windows;
using ConsoleStartsGUI.ViewModel;
namespace ConsoleStartsGUI.View
{
public partial class MainWnd : Window
{
public MainWnd(ViewModelClass viewmodel)
{
InitializeComponent();
}
}
}
有没有办法在XAML中引用特定的(视图)模型对象?
最好的问候, 马丁
答案 0 :(得分:2)
是的,这是可能的:只需从构造函数中分配DataContext
class MainWindow : Window
{
public MainWindow(ViewModelClass viewmodel)
{
InitializeComponent();
this.DataContext = viewmodel; // should work before as well as after InitalizeComponent();
}
}
由于某些原因,从XAML绑定显然不起作用。