C# WPF-MVVM-UserControl绑定
我试图实现一个简单的UserControl示例,在文本框中显示当前日期时间,每秒更新四次 我创建了一个简单的用户控件:C# WPF-MVVM-UserControl绑定,c#,wpf,mvvm,user-controls,C#,Wpf,Mvvm,User Controls,我试图实现一个简单的UserControl示例,在文本框中显示当前日期时间,每秒更新四次 我创建了一个简单的用户控件: <UserControl x:Class="UC.TestUC" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
<UserControl x:Class="UC.TestUC"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:UC"
mc:Ignorable="d"
d:DesignHeight="50" d:DesignWidth="100">
<d:UserControl.DataContext>
<local:TestUC_VM/>
</d:UserControl.DataContext>
<Grid Background="Azure">
<TextBox Text="{Binding TestString}"/>
</Grid>
</UserControl>
主窗口XAML:
<Window x:Class="UC.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:UC"
mc:Ignorable="d"
Title="MainWindow" Height="100" Width="200">
<Window.DataContext>
<local:MainWindow_VM/>
</Window.DataContext>
<Window.Resources>
<local:TestUC_VM x:Key="TestUC_VM"/>
</Window.Resources>
<Grid>
<local:TestUC DataContext="{StaticResource TestUC_VM}"/>
</Grid>
</Window>
即使我通过调试器看到我正在通过TestString setter,主窗口也不会更新。
我很确定我在主窗口中设置UC的DataContext时遗漏了一些琐碎的东西,但经过几个小时的浏览和思考,我一直无法找到什么
感谢您的帮助。表达
<local:TestUC DataContext="{StaticResource TestUC_VM}"/>
写
<local:TestUC DataContext="{Binding UcVm}"/>
在setter中尝试以下操作:
OnPropertyChanged(nameof(TestString))
@praty:没有任何变化。请注意,UserControl永远不应该像在UserControl的XAML中那样显式设置自己的DataContext。您应该删除它。@grandangelo也编辑它:
除此之外,MainWindow\u VM的TestUC\u VM成员与您分配UCs DataContext的MainWindow中的TestUC\u VM资源不同。
<local:TestUC DataContext="{StaticResource TestUC_VM}"/>
public TestUC_VM UcVm { get; } = new TestUC_VM();
<local:TestUC DataContext="{Binding UcVm}"/>
UcVm.TestString = ...