C# 将WPF XAML中的DataContext设置为特定对象
我从控制台应用程序启动了一个WPF窗口。但我在数据绑定方面有困难 TL;DR:是否可以引用WPF XAML中的特定(视图)模型对象? 这是我的代码: Console.cs 控制台应用程序使用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
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
。我会更新我的答案。