2014-02-05 62 views
0

我是新來的XAML,我試圖綁定我的窗口(西洋雙陸棋板)的分數屬性到控件。XAML:數據綁定到窗口不工作後InitializeComponent()

我能得到它的工作是通過後面的代碼如下:

public partial class BgBoard : Window 
{ 
    public BgBoard() 
    { 
     InitializeComponent(); 
     DataContext = this; 
     _Score = 999; 
    } 
    private int _Score; 
    public string Score { get { return _Score.ToString(); } } 
} 

XAML

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:System="clr-namespace:System;assembly=mscorlib" 
    xmlns:bgb="clr-namespace:BackgammonBoard" 
    xmlns:Properties="clr-namespace:BackgammonBoard.Properties"  x:Class="BackgammonBoard.BgBoard" 
    Title="Backgammon board" Width="750" Height="500" MinWidth="375" MinHeight="250">  
    <TextBlock x:Name="Player_Score" Text="{Binding Score}"/> 
</Window> 

接下來,我想宣佈在XAML DataContext的,而不是後面的代碼。我刪除「的DataContext =這種」從後面的代碼和XAML中添加以下屬性我的窗前:

DataContext="{Binding RelativeSource={RelativeSource Self}}" 

目前比分是不再顯示我的用戶界面上。

但是,如果我調用InitilalizeComponent()之前落後初始化代碼中的得分,比分再次顯示:

public BgBoard() 
{ 
    _Score = 999; 
    InitializeComponent(); 
} 

所以我的問題是,我應該在XAML做,以確保分數是正確的它是在代碼修改的背後(每次顯示的不是隻有當它之前進行初始化的InitializeComponent()?

+0

歡迎來到StackOverflow。爲了讓您充分利用本網站,我建議您花一些時間閱讀StackOverflow [幫助中心](http://stackoverflow.com/help)的各個頁面。特別是,現在你的第一個問題已經得到解答,我想提請你注意[我應該怎麼做當有人回答我的問題?](http://stackoverflow.com/help/someone-answers)頁面從幫助中心。按照這些頁面中的建議重要,所以如果您知道如何正確使用本網站,則可以更好地使用它。 – Sheridan

回答

0

您可以將數據綁定到DependencyObjectDependencyPropertyWindowDependencyObject,因此,所有你需要是DependencyProperty ......有也不需要先將您的價值轉換成string。試試這個:

public static DependencyProperty ScoreProperty = 
    DependencyProperty.Register("Score", typeof(int), typeof(BgBoard)); 

public int Score 
{ 
    get { return (int)GetValue(ScoreProperty); } 
    set { SetValue(ScoreProperty, value); } 
} 

public BgBoard() 
{ 
    Score = 999; 
    InitializeComponent(); 
} 

如果使用DependencyProperty,那麼你可以從XAML文件甚至數據綁定到它不設置Window.DataContext在所有

<TextBlock x:Name="Player_Score" Text="{Binding Score, RelativeSource={RelativeSource 
    AncestorType={x:Type YourLocalXamlNamespacePrefix:BgBoard}}}"/> 
+0

Tx!這工作。當UI在代碼後面更改時,UI現在更新。 – user3277372

1

你不這樣做的原因看到的分數是,該屬性不向用戶界面提出「更改通知」,您需要執行「INotifyPropertyChanged」(點擊鏈接進行解釋)

+0

Tx!不過,我已經通過添加改變分數的按鈕來嘗試它。但是,會顯示樂譜的初始值,而不是按鈕單擊的已更改值。 – user3277372