绑定到运行时对象实例

发布于 2024-12-05 07:03:34 字数 1948 浏览 1 评论 0原文

我要在这里圆圈。我有点掌握了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;
        }
    }

}

我故意保持简单,以便我可以采取婴儿步骤。我要在此处做的只是从Exiplaclass的实例中填充文本框,如果文本框更改(即双向),则更新了测试标准字段。我知道我可以在绑定中设置方法名称,该绑定在列表框中的一定程度上有效,但这似乎并不意味着我的双向。来自Delphi7 Win32程序员,这对我来说是外星人的领域!

援助感谢。

I'm going round in circles here. I've kind of got the hang of XmlDataProvider bindings but the file I'm using seems too large to bind dynamically (50Mb doesn't work; 2Mb works). So instead I have the data loaded into classes using code generated from the XSD.

However, I can't get binding to CLR objects to work, due to my lack of knowledge. I'm using Visual Studio 2008 Pro, C# and .Net 3.5.

Here's the XAML file:

<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>

And the code behind:

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;
        }
    }

}

I've deliberately kept it simple so I can take baby steps. All I want to do here is populate the textbox from an instance of ExampleClass, and have the TestString field updated if the textbox changes (ie bidirectional). I know I can set MethodName in the binding which works to a certain extent in ListBoxes but that doesn't seem to imply bidirectional to me. Coming from a Delphi7 Win32 programmer, this is alien territory for me!

Assistance appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

勿挽旧人 2024-12-12 07:03:34

这些是必要的更改:

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

然后在构造函数中:

DataContext = TestInstance;

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

These are the necessary changes:

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

and then in the constructor:

DataContext = TestInstance;

If my understanding of the question is correct, you don't need Grid.Resources section at all.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文