Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XAML和WPF-将变量传递到XAML窗口_C#_Wpf_Xaml - Fatal编程技术网

C# XAML和WPF-将变量传递到XAML窗口

C# XAML和WPF-将变量传递到XAML窗口,c#,wpf,xaml,C#,Wpf,Xaml,我对WPF非常陌生,我正在尝试加载一个XAML窗口,并在它的构造函数中向这个XAML传递一个变量,因为我需要它从这个传递的变量中加载一些项 有人能告诉我怎么做吗? 如何启动XAML窗口并给它一个变量 提前谢谢。。 Erika通常,在WPF中,您会创建要加载的项,并将窗口(或UserControl)的DataContext设置为包含项的类。然后,您可以直接绑定到它们,以便从XAML进行自定义显示。尝试使用MVVM(模型视图模型)模式 您需要模型: class Person { public

我对WPF非常陌生,我正在尝试加载一个XAML窗口,并在它的构造函数中向这个XAML传递一个变量,因为我需要它从这个传递的变量中加载一些项

有人能告诉我怎么做吗? 如何启动XAML窗口并给它一个变量

提前谢谢。。
Erika

通常,在WPF中,您会创建要加载的项,并将窗口(或UserControl)的DataContext设置为包含项的类。然后,您可以直接绑定到它们,以便从XAML进行自定义显示。

尝试使用MVVM(模型视图模型)模式

您需要模型:

class Person
{
    public string Name { get; set; }
}
视图是您的窗口或用户控件

ViewModel可以是这样的:

class PersonViewModel : INotifyPropertyChanged
{
 private Person Model;
 public PersonViewModel(Person model)
 {
  this.Model = model;
 }

 public string Name
 {
  get { return Model.Name; }
  set
  {
   Model.Name = value;
   OnPropertyChanged("Name");
  }
 }

 public event PropertyChangedEventHandler PropertyChanged;
 private void OnPropertyChanged(string propertyName)
 {
  var e = new PropertyChangedEventArgs(propertyName);
  PropertyChangedEventHandler changed = PropertyChanged;
  if (changed != null) changed(this, e);
 }
}
然后需要为窗口指定DataContext:

View.DataContext = new PersonViewModel(somePerson);
然后在XAML中定义绑定:

<UserControl x:Class="SomeApp.View"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300">
<Grid>
    <TextBlock Text="{Binding Name}" />
<Grid>    
<UserControl>

MVVM使代码变得非常优雅和简单


您也可以尝试使用或Caliburn()框架,但它们更复杂。

我的问题是我想访问XAML窗口之外的类,而不是通过绑定与相关代码通信。为此,我只需要创建一个静态类来保存所需的值。很简单,但当时我没有想到解决办法。这是一种相当肮脏的解决问题的方法,但它确实奏效了

我要感谢两位帮助我理解MVVM体系结构的贡献者,因为我以前并没有真正理解这一点


非常感谢您的及时回复,如果我的问题很容易被误解,请原谅!有时我不太善于表达我的想法

如果您想了解更多关于MVVM的内容,请查看以下内容(MVVM非常强大,是开发可测试代码的好方法):


它应该会让您对MVVM有一个很好的了解。您可以在标题下下载一个示例,标题是:可以从MSDN代码库下载代码。

我的问题可能不清楚(或者我可能不理解您的意思!我对WPF很陌生),我尝试将一个对象传递到XAML窗口,以便控件,哪些已经创建,这些将显示从对象传递的内容如果这是您的意思,是否可以提供一个粗略的示例?我真的很感激,谢谢!你的背景是Windows窗体吗?其他不同语言的图书馆?这将帮助您找到正确的方向……目前它都在WPF/XAML窗口中,所有的库都在C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#。我在这里写了一个很长的系列文章:也许会有帮助。嗨,谢谢你的精彩回复,我还在尝试,现在失败了。我理解绑定部分,但是我认为这更多的是指当我想从XAML本身的代码设置XAML窗口内的内容时,对吗?或者,当我想在加载期间为我的XAML窗口设置属性时,这是否适用?在这种情况下,我应该如何称呼它来做后一个pls?正如我理解你的问题,你想传递一些数据到WPF表格。您可以通过初始化其DataContext来完成。您不需要编写任何特殊的表单构造函数或其他代码。绑定机制将帮助您显示数据并捕获其更改。如果您希望访问XAML之外的类变量,最好的方法是在XAML中设置数据上下文,然后通过数据绑定获取所需的变量。