C# 无法通过XAML设置DataContext,但可以通过代码设置
在XAML中声明Datacontext时,它不起作用。但如果在代码中设置,则同样有效 详细分析 我的XAMLC# 无法通过XAML设置DataContext,但可以通过代码设置,c#,wpf,xaml,datacontext,C#,Wpf,Xaml,Datacontext,在XAML中声明Datacontext时,它不起作用。但如果在代码中设置,则同样有效 详细分析 我的XAML <Window x:Class="SimpleDatabindingwithclass.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xam
<Window x:Class="SimpleDatabindingwithclass.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Name="windo">
<Grid DataContext="{Binding ElementName=windo,Path=objectOfStudent}">
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<TextBox Grid.Row="0" Margin="25" Height="25" Width="100" HorizontalAlignment="Left" Name="TextBox1" Text="{Binding Path=StudentName}"></TextBox>
</Grid>
</Window>
在MainWindow()中,应用程序可以工作!
你认为问题是什么?这是因为你试图通过XAML使用名为
objectOfStudent
的局部变量-这在XAML上下文中没有意义。XAML只接受字段和属性,不接受局部变量。这是因为您试图通过XAML使用名为objectOfStudent
的局部变量-这在XAML上下文中没有任何意义。XAML只接受字段和属性,不接受局部变量。绑定只适用于公共属性,不能绑定到某些局部变量。将学生的objectOfStudent
作为主窗口的公共属性
编辑:
编辑:
您还需要在main窗口
和Student
类中实现接口,并在设置属性时引发PropertyChanged
。这是正确的方法,每次更改属性时都会更新绑定。或者一种简单的方法:在调用InitializeComponent
之前创建学生的对象
public MainWindow()
{
objectOfStudent = new Student();
objectOfStudent.StudentName = "John diley";
objectOfStudent.Address = "20, North Travilia, Washington DC.";
InitializeComponent();
//not setting datacontext here since i set that in xaml
}
绑定仅适用于公共属性,不能绑定到某些局部变量。将学生的objectOfStudent
作为主窗口的公共属性
编辑:
编辑:
您还需要在main窗口
和Student
类中实现接口,并在设置属性时引发PropertyChanged
。这是正确的方法,每次更改属性时都会更新绑定。或者一种简单的方法:在调用InitializeComponent
之前创建学生的对象
public MainWindow()
{
objectOfStudent = new Student();
objectOfStudent.StudentName = "John diley";
objectOfStudent.Address = "20, North Travilia, Washington DC.";
InitializeComponent();
//not setting datacontext here since i set that in xaml
}
这是否意味着我不能在XAML中使用类的对象?如何将其移植到XAML,而不是将其放入n代码?对不起,如果这听起来很傻,但这让我有点害怕!你可以将一个名为“Student”的属性添加到你的Window类中,该类返回一个Student insatnce,然后使用它而不是“objectOfStudent”这是否意味着我不能在XAML中使用类的对象?我如何将其移植到XAML而不是将其放入n代码?抱歉,如果这听起来很傻,但这让我有点吃惊!你可以添加一个名为“Student”的属性“Student”返回窗口类,该窗口类返回一个Student insatnce,然后使用它来代替“objectOfStudent”,谢谢Zabasky。我知道objectofStudent与班级学生有关,是一个局部变量。现在,我如何使它成为MainWindow的属性?简单地说,如何添加属性并将其引用到学生实例?这仍然不起作用!仍然两个文本字段都是空的!在添加了Student{get;set;}的公共Student对象之后,我在上面的XAML代码中使用了它。还是没弄对。无论如何,问题的定义很清楚。@Madhuresh要找到正确的方法,请阅读更多关于INotifyPropertyChanged接口及其用途的信息。谢谢Zabasky。我知道objectofStudent与班级学生有关,是一个局部变量。现在,我如何使它成为MainWindow的属性?简单地说,如何添加属性并将其引用到学生实例?这仍然不起作用!仍然两个文本字段都是空的!在添加了Student{get;set;}的公共Student对象之后,我在上面的XAML代码中使用了它。还是没弄对。无论如何,问题的定义是明确的。@Madhuresh要找到正确的方法,只需阅读更多关于INotifyPropertyChanged接口及其用途的信息。
public Student objectOfStudent { get; set; }
public MainWindow()
{
InitializeComponent();
objectOfStudent = new Student();
objectOfStudent.StudentName = "John diley";
objectOfStudent.Address = "20, North Travilia, Washington DC.";
//not setting datacontext here since i set that in xaml
}
public MainWindow()
{
objectOfStudent = new Student();
objectOfStudent.StudentName = "John diley";
objectOfStudent.Address = "20, North Travilia, Washington DC.";
InitializeComponent();
//not setting datacontext here since i set that in xaml
}