依赖属性不会更新Silverlight 4
|
我在更新UserControl / View的依赖项属性时遇到了一些麻烦。
我有一个主视图(MainView.xaml),该视图中声明了一系列其他用户控件。其中之一如下所示:
<local:Snapshot BrandID=\"{Binding Path=Session.Test}\" />
我的Snapshot.xaml有一个TextBlock:
<TextBlock Text=\"Sample text\" x:Name=\"brandIDTBlock\" />
我的Snapshot.xaml.cs具有以下依赖项属性:
public string BrandID
{
get { return (string)GetValue(BrandIdProperty); }
set { SetValue(BrandIdProperty, value); }
}
public static readonly DependencyProperty BrandIdProperty = DependencyProperty.Register(\"BrandID\", typeof(string), typeof(Snapshot), new PropertyMetadata(new PropertyChangedCallback(OnBrandIdChange)));
private static void OnBrandIdChange(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var control = (Snapshot)d;
control.brandIDTBlock.Text = (string)e.NewValue;
}
会话是MainView的属性,并且我希望在Session对象中更改Test属性时更新我的brandIDTBlock TextBlock。
Test属性的声明如下:
private string _test = \"Test Value Binding\";
public string Test
{
get { return _test; }
set { _test = value; }
}
现在某事正在运行,因为当我运行该应用程序时,我看到“ Test Value Binding \”正确显示在视图中,问题是当Test的值在我的Session对象中更改时,更改不会传播到视图。
我还尝试实现INotifyPropertyChanged接口,如下所示:
public string Test
{
get { return _test; }
set
{
_test = value;
OnPropertyChanged(\"Test\");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
但它仍未更新。
更新:事实证明,这再次是一个nooby错误。在我的Snapshot.xaml.cs中,我正在处理饼图的片段代码中更改数据上下文。我通过更改绑定表达式来解决此问题,使绑定元素成为Snapshot.xaml的父元素,在我的情况下为StackPanel \'sp \'({Binding ElementName = sp,Path = DataContext.Session.Test}) 。除了这个愚蠢的错误之外,我的原始代码中真正缺少的是INotifyPropertyChanged实现,TwoWay绑定是不必要的。
谢谢
路易斯
没有找到相关结果
已邀请:
3 个回复
剿畦缄饥小
是默认值,它允许UI仅更新绑定值。要使UI在绑定值更改后发生更改,您需要
。 您还需要引发属性更改事件,以使UI知道某些更改。 唯一的另一件事是检查您是否已正确设置视图的
。
董碘奴星
该行不属于PropertyChanged处理程序。并可能使您认为绑定起作用。 我没有时间添加正确的示例,因此,这里的链接应该可以帮助您入门。
苏髓骗撩
的值更改时,它是\“ changing \”,因为已替换了要返回的对象,所以它是主视图模型的
属性。如果是这样,您将需要主视图模型来实现
并在Session属性更新时调用PropertyChanged。