如何在 C# 中使用动态数据类型?
How to use dynamic DataType in c#?
老实说,我不知道怎么问这个。让我先解释一下我的场景。
从我上一个问题得到的:
...
var frame = sender as Frame;
UserControl1 uc1 = frame.Content as UserControl1;
MainViewModel mvm = uc1.DataContext as MainViewModel;
...
正如您所看到的 frame.Content
变化,它可以有不同的数据类型。因此,我不能只写UserControl1
。现在,我可以写什么来替代 UserControl1
?
更新: 添加了详细信息
frame.Content
根据用户交互发生变化
- 我想在运行时确定
frame.Content
的 DataContext
的当前 DataType
一如既往,如果您需要澄清,请告诉我。
如果您唯一需要的 frame.Content
是 DataContext
,您可以尝试将其转换为 FrameworkElement
,例如:
var frame = sender as Frame;
FrameworkElement content = frame.Content as FrameworkElement;
MainViewModel mvm = content.DataContext as MainViewModel;
如果 frame.Content
并不总是 FrameworkElement
您可能需要先检查一下:
var frame = sender as Frame;
FrameworkElement content = frame.Content as FrameworkElement;
if (content != null) {
MainViewModel mvm = content.DataContext as MainViewModel;
// work with mvm...
}
else {
// Frame's content is something unexpected.
}
老实说,我不知道怎么问这个。让我先解释一下我的场景。
从我上一个问题得到的
...
var frame = sender as Frame;
UserControl1 uc1 = frame.Content as UserControl1;
MainViewModel mvm = uc1.DataContext as MainViewModel;
...
正如您所看到的 frame.Content
变化,它可以有不同的数据类型。因此,我不能只写UserControl1
。现在,我可以写什么来替代 UserControl1
?
更新: 添加了详细信息
frame.Content
根据用户交互发生变化- 我想在运行时确定
frame.Content
的DataContext
的当前 DataType
一如既往,如果您需要澄清,请告诉我。
如果您唯一需要的 frame.Content
是 DataContext
,您可以尝试将其转换为 FrameworkElement
,例如:
var frame = sender as Frame;
FrameworkElement content = frame.Content as FrameworkElement;
MainViewModel mvm = content.DataContext as MainViewModel;
如果 frame.Content
并不总是 FrameworkElement
您可能需要先检查一下:
var frame = sender as Frame;
FrameworkElement content = frame.Content as FrameworkElement;
if (content != null) {
MainViewModel mvm = content.DataContext as MainViewModel;
// work with mvm...
}
else {
// Frame's content is something unexpected.
}