【发布时间】:2011-10-26 14:29:37
【问题描述】:
我的 ParentView(DashboardConsultants) 中有一个 gridview,当用户的鼠标指针悬停在单元格上时,它会显示自定义工具提示。工具提示显示了一个视图 (AgreementDetails_View),它显示了绑定到该单元格的协议的信息。我将展示我现在拥有的代码,以便您更好地理解我的问题:
ParentView 中的 DataGrid 单元格:
<DataGridTextColumn Header="Okt" Width="*" x:Name="test">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Tag" Value="{Binding Months[9].AgreementID}"/>
<Setter Property="Background" Value="White" />
<Setter Property="DataGridCell.ToolTip" >
<Setter.Value>
<v:UC1001_AgreementDetails_View Background="#FFF" Opacity="0.88" />
</Setter.Value>
</Setter>
我的 ChildView:
public UC1001_DashBoardConsultants_View(UC1001_DashboardConsultantViewModel viewModel)
{
InitializeComponent();
this.DataContext = viewModel;
}
在 ViewModel 中,我有以下方法从数据库中获取正确的协议:
private void GetRefData()
{
UC1001_ActiveAgreementArguments args = new UC1001_ActiveAgreementArguments();
args.AgreementID = 3;
DefaultCacheProvider defaultCacheProvider = new DefaultCacheProvider();
if (!defaultCacheProvider.IsSet("AgrDet:" + args.AgreementID))
{
ConsultantServiceClient client = new ConsultantServiceClient();
AgreementDetailsContract = client.GetAgreementDetailsByAgreementID(args);
defaultCacheProvider.Set("AgrDet:" + args.AgreementID, AgreementDetailsContract, 5);
}
else
{
AgreementDetailsContract = (UC1001_ActiveAgreementContract)defaultCacheProvider.Get("AgrDet:" + args.AgreementID);
}
}
正如您现在所看到的,该方法始终调用相同的协议,(我这样做是为了测试目的)但现在我想要在 DataGrid 单元标记中指定 ID 的协议(在本例中为 Months[9].AgreementID )。
我可以在子视图的构造函数中将其提供给 ViewModel,但我认为由于 MVVM 模式(或者是否允许?),它是不允许的。
所以我的问题是:如何将 ParentView 中指定的 AgreementID 传递给 ChildView 的 ViewModel 以获得 ChildView 的正确数据?
当然,可以很乐意提供更多信息/代码/说明,请问:)
提前致谢!
【问题讨论】: