如何摆脱代码隐藏在DataContext定义为XAML?(How to move the DataC

2019-09-17 02:30发布

我定义包含在代码隐藏属性的对象,并且希望将对象设置为的datacontext在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>

Answer 1:

您可以设置通过XAML中的DataContext的公共财产。 blindmeis已就如何做到这一点的好例子。

你在你的帖子没有不设置DataContext的,但你的控件的文本属性绑定到窗口的属性。 这只有在DataContext设置工作。 另一种方式来做到这一点,如果你不想做MVVM(我建议你,虽然),被引用在你的绑定具体内容:

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来代替。



Answer 2:

当你在代码隐藏创建equipinfo类,为什么不设置的DataContext吗?

不过你可以用XAML创建一个DataContext(你不需要的代码隐藏的东西,然后)

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

但请看看MVVM模式



Answer 3:

当您在代码隐藏创建equipinfo类,为什么不设置的DataContext吗?

MVVM整点是从代码单独UI支持使用视图模型代理。 如果你要引用UI元素来设置它的DataContext你还不如引用它来设置它的价值,而忘记了MVVM。



文章来源: How to move the DataContext definition from code-behind to XAML?