【发布时间】:2011-07-24 18:10:15
【问题描述】:
我有一个相当简单的用户控件 (RatingControl),它的依赖属性定义如下:
public partial class RatingControl : UserControl
{
public RatingControl()
{
InitializeComponent();
}
public static readonly DependencyProperty RatingValueProperty = DependencyProperty.Register("RatingValue", typeof(double), typeof(RatingControl), new PropertyMetadata(0.0));
public double RatingValue
{
set
{
double normalizeValue = 0.0;
if (value > 10.0)
{
normalizeValue = 10.0;
}
else if (value > 0.0)
{
normalizeValue = value;
}
SetValue(RatingValueProperty, normalizeValue);
RenderRatingValue();
}
get { return (double)GetValue(RatingValueProperty); }
}
...
如果我直接分配,此控件会正确接收 RatingValue:
<gtcontrols:RatingControl RatingValue="2.0" />
但是,如果我尝试使用数据绑定来分配它,它就不起作用。永远不会调用 RatingValue 的“设置”代码,我也不会在调试输出窗口中看到数据绑定错误。 请注意下面我尝试将相同的值分配给标准属性(宽度),在这种情况下,该值被正确传递给它。
<StackPanel>
<TextBox Name="Test" Text="200.0" />
<gtcontrols:RatingControl Width="{Binding ElementName=Test, Path=Text}" RatingValue="{Binding ElementName=Test, Path=Text}" />
<TextBlock Text="{Binding ElementName=Test, Path=Text}" />
</StackPanel>
不仅 TextBlock 正确接收值。 RatingControl 也接收到宽度,正确设置为 200 像素;但是,RatingValue 没有设置(甚至没有调用方法集)
我错过了什么? 提前致谢。
【问题讨论】:
标签: silverlight data-binding windows-phone-7