Wpf 为什么';我的依赖项属性更改不会传播到我的usercontrol
我正在构建一个WindowsPhone8应用程序。我有一个UserControl,它的内容应该异步更新。我的模型实现了INotifyPropertyChanged。当我在模型中更新一个值时,它会按应该的方式传播到TextBox控件,但不会传播到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
<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}" />