我有以下代码:
MainWindow.xaml
<Window x:Class="SampleApplication.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"
DataContext="{Binding Employee}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="200" />
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0" Content="ID:"/>
<Label Grid.Row="1" Grid.Column="0" Content="Name:"/>
<TextBox Grid.Column="1" Grid.Row="0" Margin="3" Text="{Binding EmpID}" />
<TextBox Grid.Column="1" Grid.Row="1" Margin="3" Text="{Binding EmpName}" />
</Grid>
</Window>
Employee.cs
namespace SampleApplication
{
public class Employee
{
public Employee()
{
EmployeeDetails employeeDetails = new EmployeeDetails();
employeeDetails.EmpID = 123;
employeeDetails.EmpName = "ABC";
}
}
public class EmployeeDetails
{
private int empID;
public int EmpID
{
get
{
return empID;
}
set
{
empID = value;
}
}
private string empName;
public string EmpName
{
get
{
return empName;
}
set
{
empName = value;
}
}
}
}
这是一段非常简单的代码,我只想将Employee.cs类中的EmpID
和EmpName
属性绑定到MainWindow.xaml中的Textboxes的Text属性,但是当我运行代码时,这些文本框中什么也没有出现。装订是否正确?
4条答案
按热度按时间2ekbmq321#
此代码将始终失败。
正如所写的,它说:在DataContext属性上查找名为“Employee”的属性,并将其设置为DataContext属性。显然这是不对的。
要让代码正常工作,请将窗口声明更改为:
这将声明一个新的XAML命名空间(本地),并将DataContext设置为Employee类的示例。这将导致您的绑定显示默认数据(来自构造函数)。
然而,这实际上不太可能是你想要的。相反,你应该有一个新的类(称之为MainViewModel),它有一个
Employee
属性,然后你可以绑定到它,就像这样:现在你的XAML变成了:
现在您可以添加其他属性(其他类型、名称)等。有关详细信息,请参见Implementing the Model-View-ViewModel Pattern
1hdlvixo2#
首先,你应该在
Employee
类中创建一个包含员工详细信息的属性:如果你不这样做,你将在
Employee
构造函数中创建对象的示例,你将失去对它的引用。在XAML中,您应该创建
Employee
类的示例,然后可以将其分配给DataContext
。你的XAML应该看起来像这样:
现在,在创建了包含员工详细信息的属性之后,您应该使用此属性进行绑定:
ftf50wuq3#
这里有几个问题。
1.你不能将DataContext赋值为
DataContext="{Binding Employee}"
,因为它是一个复杂的对象,不能被赋值为字符串。所以你必须使用<Window.DataContext></Window.DataContext>
语法。1.您将代表数据上下文对象的类分配给视图,而不是单独的属性,因此
{Binding Employee}
在这里无效,您只需指定一个对象。1.现在,当您使用如下有效语法分配数据上下文时
要知道,您正在创建Employee类的一个新示例,并将其分配为数据上下文对象。你很可能在默认构造函数中什么都没有,所以什么都不会显示。但是,如何在文件背后的代码中管理它呢?您已经对DataContext进行了类型转换。
1.第二种方法是在文件本身的代码后面分配数据上下文。这样做的好处是,你的代码已经知道它,并且可以使用它。
yc0p9oo04#
也许能成功,只要你改变
到
(感谢上面的 BradleyDotNET 注意到绑定源代码问题。)我知道这可能也不是最好的答案,但我认为添加(即)很重要。当你想添加'child view'到你的view中,并且你想将'parent view'中的对象指定为它的DataContext时。