【发布时间】:2013-05-25 20:24:29
【问题描述】:
我有一个非常简单的 WPF 应用程序,它有一个滑块和一个按钮。 我正在尝试将我的类中的一个属性绑定到滑块的值,并在单击按钮时在消息框中显示该值。
我的 Player 类中有一个名为 BattingForm 的属性
<Window.Resources>
<local:Player x:Key="_batsman" x:Name="_batsman"
BattingForm="{Binding Path=Value, ElementName=Form}">
</local:Player>
</Window.Resources>
<Slider Maximum="1" LargeChange="0.25" Value="0.25" Name="Form"/>
而在Player Class里面,属性如下。
public double BattingForm
{
get { return (double)GetValue(BattingFormProperty); }
set { SetValue(BattingFormProperty, value); }
}
public static readonly DependencyProperty BattingFormProperty =
DependencyProperty.Register("BattingForm", typeof(double), typeof(Player));
并且在 buttonclick 事件内的 MainWindow.xaml.cs 中,我尝试按如下方式访问它 -
Player batsman = FindResource("_batsman") as Player;
if(batsman!=null)
{
MessageBox.Show(batsman.BattingForm.ToString());
}
在 MessageBox 中它只显示 0,而不是 Slider 的实际值。
【问题讨论】:
-
为什么您的
Player控件被声明为资源而不是窗口的一部分? -
@AdiLester Player 不是控件,它只是一个包含属性的类。
-
那么,为什么在 XAML 中需要它?您可以使用
Form.Value简单地从代码隐藏中访问滑块的值。 -
@AdiLester 我知道,但我真的很想学习我以后制作的复杂应用程序的数据绑定和依赖属性。
-
好吧,第一课:数据绑定在你实际使用资源之前不会发生——这就是你得到 value = 0 的原因。我认为如果你尝试这样做,你可以学得更好特定的而不是任意的测试。
标签: c# .net wpf xaml data-binding