C# 将WPF XAML中的DataContext设置为特定对象

C# 将WPF XAML中的DataContext设置为特定对象,c#,wpf,xaml,C#,Wpf,Xaml,我从控制台应用程序启动了一个WPF窗口。但我在数据绑定方面有困难 TL;DR:是否可以引用WPF XAML中的特定(视图)模型对象? 这是我的代码: Console.cs 控制台应用程序使用void Main()函数中的静态函数启动视图 static void StartGUI(ViewModelClass viewmodel) { Thread thread = new Thread(() => { new Application().Run(new View.MainWnd(v

我从控制台应用程序启动了一个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 viewmodel是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>
有没有一种方法可以引用XAML中的特定(视图)模型对象

致以最良好的祝愿,
Martin

是的,这是可能的:只需从构造函数中分配
DataContext

class MainWindow : Window
{
    public MainWindow(ViewModelClass viewmodel)
    {
        InitializeComponent();
        this.DataContext = viewmodel; // should work before as well as after InitalizeComponent();
    }
}

由于某些原因,从XAML绑定它显然不起作用。

是的,这是可能的:只需从构造函数中分配
DataContext

class MainWindow : Window
{
    public MainWindow(ViewModelClass viewmodel)
    {
        InitializeComponent();
        this.DataContext = viewmodel; // should work before as well as after InitalizeComponent();
    }
}

由于某些原因,从XAML绑定它显然不起作用。

在初始化Component()之后在构造函数中;写入:DataContext=viewmodel;并在初始化Component()后从构造函数的XAMLIn中删除Window.DataContext;写入:DataContext=viewmodel;并从XAML中删除Window.DataContext当我使用您的XAML解决方案时,我会得到一个System.Windows.Markup.XamlParseException:(但是
DataContext=viewmodel
解决方案可以完成这项工作。请稍等,我会尝试更正我的答案。我更精通Xamarin方言。显然,即使我们没有使用
DataContext
作为绑定源,您也不能简单地绑定
DataContext
。我会更新我的答案。当我使用您的XAML解决方案,我得到一个System.Windows.Markup.XamlParseException:(但是
DataContext=viewmodel
解决方案可以完成这项工作。请稍等,我会尝试更正我的答案。我更精通Xamarin方言。显然,即使我们没有使用
DataContext
作为绑定源,您也不能简单地绑定
DataContext
。我会更新我的答案。