我有一个用户控件,我把它放在另一个用户控件上,如下所示:
<Grid>
<Control:ViewerControl x:Name="ViewerControl" />
</Grid>
在VM中我有:
public ImageSourceViewModel()
{
this.ViewerControl = new ViewerControl();
}
#endregion
#region Public Properties
/// <summary>
/// Gets the viewer control.
/// </summary>
public ViewerControl ViewerControl { get; private set; }
但它没有绑定。
我也对此进行了测试,但没有得到正确的结果:
<Grid>
<Control:ViewerControl DataContext="{Binding ViewerControl}" />
</Grid>
我认为它没有正确绑定的原因如下:
为了测试它是否正确绑定,我在ViewerControl上放置了一个文本块,如下所示:
<TextBlock Grid.Row="1" Foreground="Blue" x:Name="TextData" x:FieldModifier="public"/>
并且在ViewerControl构造函数中我有:
public ViewerControl()
{
TextData.Text = DateTime.Now.ToShortTimeString();
}
public
我更改了VM,因此它将TextData设置为一个新值,如下所示:
public ImageSourceViewModel()
{
this.ViewerControl = new ViewerControl();
ViewerControl.TextData.Text = "test";
}
如果查看器控件正确绑定,我应该在屏幕上看到测试,但我仍然看到时间。所以它没有正确绑定。
我正在使用Caliburn micro,但由其他人编写的控件不使用caliburn micro。
答案 0 :(得分:0)
您必须对数据绑定感到困惑,因为您尝试将UserControl
数据绑定到UserControl
的另一个实例:
<Control:ViewerControl DataContext="{Binding ViewerControl}" />
...
ViewerControl = new ViewerControl();
在WPF中,我们将数据元素绑定到 UI元素,因此您的问题与Caliburn无关,我真的建议您学会在添加更高级别的复杂性(Caliburn)之前,请正确使用WPF。有关理解数据绑定的更多帮助,请参阅MSDN上的Data Binding Overview页面。