2011-02-23 70 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"; 
    } 
}