为什么这个用户控件在wpf中没有正确绑定(使用caliburn micro)

时间:2014-09-05 13:59:02

标签: c# wpf xaml binding caliburn.micro

我有一个用户控件,我把它放在另一个用户控件上,如下所示:

<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。

1 个答案:

答案 0 :(得分:0)

您必须对数据绑定感到困惑,因为您尝试将UserControl数据绑定到UserControl的另一个实例:

<Control:ViewerControl DataContext="{Binding ViewerControl}" />

...

ViewerControl = new ViewerControl();

在WPF中,我们将数据元素绑定到 UI元素,因此您的问题与Caliburn无关,我真的建议您学会在添加更高级别的复杂性(Caliburn)之前,请正确使用WPF。有关理解数据绑定的更多帮助,请参阅MSDN上的Data Binding Overview页面。