我在代码隐藏中定义了一个包含属性的对象,并希望将该对象设置为 xaml 中的数据上下文。
namespace WpfApplication4
{
public partial class MainWindow : Window
{
public EquipInfo equip1;
public MainWindow()
{
InitializeComponent();
equip1 = new EquipInfo();
// setting here works fine but i want to do in xaml
//textBox1.DataContext = equip1;
}
}
}
这是 xaml 代码..
<Window x:Class="WpfApplication4.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">
<Grid>
<TextBox Text="{Binding Path=PIN}" Height="23"
HorizontalAlignment="Left" Margin="172,208,0,0"
Name="textBox1" VerticalAlignment="Top" Width="120" />
</Grid>
</Window>
最佳答案
您可以通过 XAML 将 DataContext 设置为公共(public)属性。 blindmeis 给出了一个很好的例子来说明如何做到这一点。
您在帖子中所做的不是设置 DataContext,而是将控件的文本属性绑定(bind)到窗口的属性。这仅在设置了 DataContext 时有效。另一种方法是,如果您不想执行 MVVM(尽管我建议这样做),请在您的绑定(bind)中引用特定元素:
1.) 将成员更改为 AutoProperty 或类似的
public EquipInfo equip1 {get;set;}
2.) 给你的窗口起个名字
<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="myWin"
Title="MainWindow" Height="350" Width="525">
2.) 通过实例名称访问窗口属性
<TextBox Text="{Binding ElementName=myWin, Path=equip1.PIN}"/>
附带说明一下,使用 MVVM 会真的更好。相反。
关于c# - 如何将 DataContext 定义从代码隐藏移动到 XAML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10510673/