我在我的ParentView(DashboardConsultants)中顯示了一個GridView,它顯示了當用戶的鼠標指針懸停在單元格上時的自定義工具提示。該工具提示顯示View(AgreementDetails_View),其顯示綁定到該單元的協議的信息。我會告訴我現在有代碼,這樣就可以更好地理解我的問題:從父視圖傳遞信息到子視圖
DataGrid單元格中ParentView:
<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;
}
在視圖模型,我有以下方法從數據庫中獲得正確的協議:
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 Cell Tag中指定的協議(本例中爲Months[9].AgreementID
)。我可以把它給我的子視圖的構造函數中的ViewModel,但我不認爲這是允許由於MVVM模式(或允許?)。
所以我的問題是:如何將我的ParentView中指定的AgreementID傳遞給ChildView的ViewModel以獲取ChildView的正確數據?
Ofcourse,更多信息/代碼/澄清可以愉快地提供,只問:)
提前感謝!
我也想過命令來查看,但我不能在工具提示屬性來定義一個命令(我可以在那裏調用Month []。AgreementID),或者你建議將Command放在別的地方嗎? –
問題是爲什麼父視圖顯示協議的細節?爲什麼AgreementView沒有這樣做(它實際上與AgreementViewModel綁定,因爲它提供了udnerlying協議)? – sll
你是什麼意思? ParentView有一個gridd,每個單元格包含一個AgreementID。當我將鼠標懸停在單元格上時,它顯示包含該協議的更多信息的View的工具提示(不僅僅是AgreementID) –