2011-02-23 76 views
1

我正在从一个后端获取数据的项目上工作,即数据不断动态变化,而前端不必关心。 我需要将这些数据公开给wpf,以便某人可以通过表达式混合将事物绑定到wpf中的数据。只读是好的。 总之,我该怎么做数据绑定属性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中设置绑定,它编译但不更新。 任何帮助将不胜感激!

+0

我很困惑。你想从xaml进行简单的绑定到属性?这应该是没有问题的:在'Foo'类中实现'INotifyPropertyChanged',在这个窗口中将这个类的实例设置为'DataContext'并且绑定到这个属性。请记住,每次属性更改时都需要引发'PropertyChanged'事件。我没有看到任何问题。我不知道你说什么意思时说:“在Foo类的构造函数中,我在文本框上设置了绑定” - 这绝对不是,你应该做什么。 – Pako 2011-02-23 06:34:49

+0

谢谢,这是我所需要的。 – Rokujolady 2011-02-23 18:45:30

+0

我需要做的是在xaml中实例化对象,然后在C++中引用它。我正在用C++实例化它,并在xaml中引用它,当我创建一个静态资源时,xaml创建了自己的实例并且没有得到我的更新。为了后代的缘故,最终的xaml结束了上面的详细解决方案。 – Rokujolady 2011-02-23 18:47:21

回答

1

[由Rokujolady答案]
对于后人,我已经发布了解决方案: 我被实例化从C#时,我应该已经从XAML实例化的对象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"; 
    } 
}