绑定到运行时对象实例

时间:2011-09-19 08:18:01

标签: c# wpf binding .net-3.5

我在这里绕圈子。我有点喜欢XmlDataProvider绑定,但我正在使用的文件似乎太大而无法动态绑定(50Mb不起作用; 2Mb正常工作)。因此,我使用从XSD生成的代码将数据加载到类中。

但是,由于我缺乏知识,我无法绑定到CLR对象。我正在使用Visual Studio 2008 Pro,C#和.Net 3.5。

这是XAML文件:

<Window x:Class="WpfObjectText.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfObjectText"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <Grid.Resources>
            <ObjectDataProvider x:Key="simpleBinding" ObjectType="{x:Type local:ExampleClass}"/>
        </Grid.Resources>
        <StackPanel>
            <TextBox Name="textBox1" Text="{Binding Path=simpleBinding}" />
        </StackPanel>
    </Grid>
</Window>

背后的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfObjectText
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public ExampleClass TestInstance = new ExampleClass("Hello, world!");

        public Window1()
        {
            InitializeComponent();
        }
    }

    public class ExampleClass
    {
        public string TestString { get; set; }

        public ExampleClass(string initialText)
        {
            TestString = initialText;
        }
    }

}

我故意保持简单,所以我可以采取婴儿步骤。我想要做的就是从ExampleClass的实例填充文本框,如果文本框发生更改(即双向),则更新TestString字段。我知道我可以在绑定中设置MethodName,它在ListBoxes中有一定的作用,但这似乎并不意味着对我来说是双向的。来自Delphi7 Win32程序员,对我来说这是一个异域!

协助表示赞赏。

1 个答案:

答案 0 :(得分:2)

这些是必要的变化:

<TextBox Name="textBox1" Text="{Binding Path=TestString}" />

然后在构造函数中:

DataContext = TestInstance;

如果我对这个问题的理解是正确的,那么根本不需要Grid.Resources部分。