我在这里绕圈子。我有点喜欢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程序员,对我来说这是一个异域!
协助表示赞赏。
答案 0 :(得分:2)
这些是必要的变化:
<TextBox Name="textBox1" Text="{Binding Path=TestString}" />
然后在构造函数中:
DataContext = TestInstance;
如果我对这个问题的理解是正确的,那么根本不需要Grid.Resources部分。