Wpf 为什么';我的依赖项属性更改不会传播到我的usercontrol

Wpf 为什么';我的依赖项属性更改不会传播到我的usercontrol,wpf,data-binding,windows-phone-8,Wpf,Data Binding,Windows Phone 8,我正在构建一个WindowsPhone8应用程序。我有一个UserControl,它的内容应该异步更新。我的模型实现了INotifyPropertyChanged。当我在模型中更新一个值时,它会按应该的方式传播到TextBox控件,但不会传播到UserControl的内容。 我遗漏了谜题的哪一部分,还是根本不可能? 这是我的复制场景 应用程序页面: <phone:PhoneApplicationPage x:Class="BindingTest.MainPage"> <Gr

我正在构建一个WindowsPhone8应用程序。我有一个UserControl,它的内容应该异步更新。我的模型实现了INotifyPropertyChanged。当我在模型中更新一个值时,它会按应该的方式传播到TextBox控件,但不会传播到UserControl的内容。 我遗漏了谜题的哪一部分,还是根本不可能? 这是我的复制场景

应用程序页面:

<phone:PhoneApplicationPage x:Class="BindingTest.MainPage">
  <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <Button Click="Button_Click" Content="Click" HorizontalAlignment="Left" Margin="147,32,0,0" VerticalAlignment="Top"/>
    <TextBlock  HorizontalAlignment="Left" Margin="69,219,0,0" TextWrapping="Wrap" Text="{Binding Bar}" VerticalAlignment="Top" Height="69" Width="270"/>
    <app:MyControl x:Name="Snafu" HorizontalAlignment="Left" Margin="69,319,0,0" Title="{Binding Bar}" VerticalAlignment="Top" Width="289"/>
  </Grid>
</phone:PhoneApplicationPage>
usercontrolxaml

<UserControl x:Class="BindingTest.MyControl">
    <TextBox x:Name="LayoutRoot" Background="#FF9090C0"/>
</UserControl>
当我运行这个示例时,UserControl文本框将包含welcome。当我点击按钮时,常规的文本框更新为Gnorf,但UserControl仍然显示Welcome

我还发现,如果仅绑定到UserControl,则当set_DataContext调用返回时,PropertyChanged事件处理程序为null。数据绑定基础结构似乎推断到my UserControl的绑定是一次性绑定,而不是常规的单向绑定。 有什么想法吗?

试试这个:-

 <app:UserControl1 x:Name="Snafu" Title="{Binding Bar,Mode=TwoWay}" />


我检查了它..这将起作用..:)

不起作用:未能从文本“PropertyChanged”中创建“System.Windows.Data.UpdateSourceTrigger”。此错误的确切位置..我复制了您的整个项目,并且在我的末尾它工作正常。请立即尝试..我已更新了我的答案谢谢。只要设置
Mode=TwoWay
就可以了。不需要
更新资源记录器
。当然,但要注意,该解决方案是一种黑客行为。我的绑定是单向的,从源代码到UI,但我需要将其标记为双向,以使其工作。因此,我们必须将其归为Microsoft的codeDP setter/getter中可能存在的一个bug,该bug从未通过绑定更新调用过。不确定您的
LayoutRoot.Text=value
意味着每次都要运行,或者仅当您从代码中调用setter时才运行,但这是一种明确的气味。
public partial class MyControl : UserControl
{
    public MyControl()
    {
        InitializeComponent();
    }
    public static readonly DependencyProperty TitleProperty = DependencyProperty.Register("Title", typeof(string), typeof(MyControl), new PropertyMetadata("", OnTitleChanged));
    static void OnTitleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        MyControl c = (MyControl)d;
        c.Title = e.NewValue as String;
    }
    public string Title
    {
        get
        {
            return (string)GetValue(TitleProperty);
        }
        set
        {
            SetValue(TitleProperty, value);
            LayoutRoot.Text = value;
        }
    }
}
 <app:UserControl1 x:Name="Snafu" Title="{Binding Bar,Mode=TwoWay}" />