开发者

Binding to runtime object instance

开发者 https://www.devze.com 2023-04-06 00:15 出处:网络
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

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;
usin开发者_StackOverflow中文版g 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.


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消