依赖属性不会更新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绑定是不必要的。 谢谢 路易斯     
已邀请:
您需要在绑定中添加“ 5”:
<local:Snapshot BrandID=\"{Binding Path=Session.Test, Mode=TwoWay}\" />
OneWay
是默认值,它允许UI仅更新绑定值。要使UI在绑定值更改后发生更改,您需要
TwoWay
。 您还需要引发属性更改事件,以使UI知道某些更改。 唯一的另一件事是检查您是否已正确设置视图的
DataContext
。     
绑定不正确。通过仅使用路径的{Binding},您可以尝试绑定到通过DataContext公开的数据。您是否设置了DataContext? 编辑 您的代码中还有更多错误:
control.brandIDTBlock.Text = (string)e.NewValue;
该行不属于PropertyChanged处理程序。并可能使您认为绑定起作用。 我没有时间添加正确的示例,因此,这里的链接应该可以帮助您入门。     
当视图模型中
Test
的值更改时,它是\“ changing \”,因为已替换了要返回的对象,所以它是主视图模型的
Session
属性。如果是这样,您将需要主视图模型来实现
INotifyPropertyChanged
并在Session属性更新时调用PropertyChanged。     

要回复问题请先登录注册