我无法将DataContext从一个userControl后面的代码设置为另一个userControl

时间:2014-03-03 21:10:43

标签: wpf

我无法将DataContext从一个userControl后面的代码设置为另一个userControl。

private void grdWorkingList_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e) {
    DashboardSynopsisViewModel dsViewModel = new DashboardSynopsisViewModel();
    AuditInfoViewModel auditInfoViewModel = new AuditInfoViewModel();

    AuditInfoView auditInfoView = new AuditInfoView();
    var selectedItem = (grdWorkingList.SelectedItem as AutoMgmtSoln.AuditWinPro.ClientData.Model.AuditDTO); 

    // MainWindow mainWindow = new MainWindow();
    DSViewContentControl.Content = new AuditInfoView();

    auditInfoView.DataContext = auditInfoViewModel;
    auditInfoViewModel.AuditDTO = auditInfoViewModel.getAuditById(selectedItem.AuditId); 
}

我有两个用户控件DashboardSynopsisViewAuditInfoView,其中包含视图模型DashboardSynopsisViewModelAuditInfoViewModel。所以在后面的代码中我有一个事件grdWorkingList_MouseDoubleClick,它在mouseDouble点击时被触发,它将dashboardSynopsisView的内容控件设置为AuditInfoView以及DataContext到{{ 1}}。 AuditInfoViewModel有一个属性AuditInfoViewModel,我用它来显示所选项目的信息。

这是我的.xaml文件的一部分

AuditDTO

以下是我为解决问题所做的改变。

<TextBlock Grid.Column="0" Grid.Row="0"  Text="Company Code :"></TextBlock>
<TextBlock Grid.Column="1" Grid.Row="0" Width="auto" Text="{Binding  AuditDTO.CompanyCode}" ></TextBlock>

<TextBlock Grid.Column="0" Grid.Row="1" >Company Name :</TextBlock>
<TextBlock Grid.Column="1" Grid.Row="1" Width="auto" Text="{Binding  AuditDTO.CompanyName}" ></TextBlock>

1 个答案:

答案 0 :(得分:0)

您正在设置“auditInfoView”变量的数据上下文,但将内容控件设置为新的AuditInfo视图。

进行这些匹配(可能通过将内容设置更改为auditInfoView变量),您的代码应该可以正常工作。

为了提供一些背景知识,如果您不熟悉C#,使用new运算符会调用类的构造函数,从而创建一个具有默认值的新对象(以及构造函数本身完成的任何集合或操作)。设置另一个实例的DataContext属性对新构造的实例没有影响。