绑定到实例中的属性

时间:2011-02-23 01:10:57

标签: c# wpf xaml data-binding binding

我正在开发一个从后端获取数据的项目,即数据不断动态变化,前端不必关心。 我需要将这些数据暴露给wpf,以便有人可以通过表达式混合将事物绑定到wpf中的数据。 Readonly很好。 简而言之,如果我的控制流程大致如下,如何在类型为“Foo”的类“foo”的实例中对属性Foostring进行数据绑定:

 public partial class Window1 : window
 {
      public Window1()
      {
           InitializeComponent();
           Foo foo = new foo;
      }
   // my text box is defined in the xaml of this window.

 }

public ref class Foo
{
     Foo()
    {
         FooProperty = "work,dammit";
    }
    private string _foostring="";
    public string FooProperty
    {
       get {return _foostring;}
        set {foostring=value;} 

    }
}

如果在Foo类的构造函数中我在文本框中设置了绑定,并且我从INotifyPropertyChanged继承并在FooProperty的设置上引发事件,那么我可以开始工作。 但是,这不会将此变量暴露给表达式混合 - 它并不是真正设置数据源。我试图在xaml中设置绑定,它编译但不更新。 任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

[Rokujolady回答]
对于后代,我发布了解决方案: 当我应该从xaml实例化时,我正在从c#实例化对象foo,因为xaml正在创建自己的实例,因为我正在更新c#实例化实例,所以它没有被更新。显然你不能从xaml引用在c#中创建的对象,但你可以引用从c#在xaml中创建的对象。代码最终如下: XAML:

<Window.Resources>
<local:Foo x:Name "foo" x:Key="FooDataSource" d:IsDataSource="True"/>
...
</Window.Resources>
<Grid x:name="blah">
<Grid DataContext="{Binding Source={StaticResource FooDataSource}}">
<TextBlock x:Name="myText" Text="{Binding FooProperty, Mode=Default}"></TextBlock></Grid>

C#代码看起来像这样:

public partial class Window1:window
{
     Foo myFooVariable = null;
     public Window1()
     {
          InitializeComponent();
          myFooVariable = this.Resources["FooDataSource"] as Foo;
          myFooVariable.FooString = "Work, Dammit";
     }
}