我是XAML的新手,我正试图将我的窗口(步步高板)的得分属性绑定到控件。
我能够通过后面的代码使其工作如下:
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 = This”,并在XAML中将以下属性添加到了我的窗口中:
DataContext="{Binding RelativeSource={RelativeSource Self}}"
现在我的用户界面上不再显示分数。
但是,如果我在调用InitilalizeComponent()之前初始化代码中的分数,则会再次显示分数:
public BgBoard()
{
_Score = 999;
InitializeComponent();
}
所以我的问题是,我应该在XAML中做些什么来确保每次在后面的代码中修改得分时正确显示得分(而不仅仅是在InitializeComponent()之前初始化得分?
答案 0 :(得分:1)
您没有看到分数的原因是该属性未向用户界面发出“更改通知”,您需要实施“INotifyPropertyChanged”(点击链接进行说明)
答案 1 :(得分:0)
您可以将数据绑定到DependencyProperty
的{{1}}。 DependencyObject
是Window
,因此您只需要DependencyObject
...而且您也无需先将值转换为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();
}
,那么您甚至可以从XAML文件绑定数据,而无需设置DependencyProperty
:
Window.DataContext