繁体   English   中英

如何将DataContext定义从代码隐藏移至XAML?

[英]How to move the DataContext definition from code-behind to XAML?

我定义了一个对象,该对象在代码隐藏中包含属性,并且想要将该对象设置为xaml中的datacontext。

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设置为公共属性。 blindmeis已经为如何做到这一点提供了很好的例子。

您在Post中所做的不是设置DataContext,而是将控件的Text属性绑定到窗口的属性。 这仅在设置了DataContext时有效。 如果您不想执行MVVM(尽管我建议这样做),则另一种方法是在Binding中引用特定的Elements:

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 确实会更好。

当您在背后的代码中创建equipinfo类时,为什么不在那里设置datacontext?

但是,您可以在xaml中创建数据上下文(然后您不需要代码隐藏的东西)

<TextBox Text="{Binding Path=PIN}">
     <TextBox.DataContext>
         <local:equip1/>
      </TextBox.DataContext>
 </TextBox>

但是请看一下MVVM模式

当您在背后的代码中创建equipinfo类时,为什么不在那里设置datacontext?

MVVM的全部重点是使用ViewModel代理将UI与代码分离。 如果要引用ui元素设置其datacontext,则最好也引用它来设置其值,而不必理会mvvm。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM