WPF将usercontrol从后面的代码绑定到viewmodel

时间:2015-04-17 17:43:06

标签: c# wpf xaml

Mainwindow 构造函数:

InitializeComponent();
MainViewModel = new MainViewModel();
captureUserControl.DataContext = MainViewModel.CaptureViewModel;
主窗口

中的

XAML

<UserControls:CaptureControl x:Name="captureUserControl"/>

usercontrol

的一部分
<Image x:Name="masterImage"  Margin="0,189,0,120" RenderTransformOrigin="0.5,0.5" Source="{Binding Path=MasterImage, ElementName=captureUserControl}" Stretch="Fill" Grid.Column="1" >

ViewModel

的一部分
public BitmapSource MasterImage { get { return masterImage; } private set {SetValue<BitmapSource>(ref masterImage, value); } }

错误

System.Windows.Data Error: 40 : BindingExpression path error: 
'MasterImage' property not found on 'object' ''CaptureControl' 
(Name='captureUserControl')'. BindingExpression:Path=MasterImage; 
DataItem='CaptureControl' (Name='captureUserControl'); 
target element is 'Image' (Name='masterImage'); target property is 'Source' (type 'ImageSource')

我认为这可能是因为在创建时captureUserControl没有设置其datacontext,直到创建它为止。我希望MainViewModel在代码后面实例化,因为需要完成的事情不是按钮点击。需要在窗口加载时调用某些async方法来初始化硬件。有没有人以这种方式设置数据绑定的示例或提示?

2 个答案:

答案 0 :(得分:1)

元素的DataContext由其子元素继承。

此处的解决方案是从绑定中删除ElementName

有关DataContexts的更多详细信息的链接:What is DataContext for?

答案 1 :(得分:0)

UserControls并非设计为绑定到视图模型。

它们意味着绑定到其他容器(即Window)。