【发布时间】:2021-07-24 12:44:30
【问题描述】:
我有一个 prism 应用程序,我在其中基于视图模型中的属性在父视图的代码隐藏中实例化多个视图
public I2CNavigatorView()
{
InitializeComponent();
var viewModel = (I2CNavigatorViewModel) DataContext;
for (int i = 0; i < viewModel.NumberOfI2C; i++)
{
var i2CTabItem = new TabItem
{
Header = "I2C " + i,
Content = new I2CView(i)
};
NavigatorTabs.Items.Add(i2CTabItem);
}
}
并且我需要将索引传递给每个子视图的视图模型,所以我目前的解决方案是在实例化视图并在其视图模型中设置变量时将索引作为参数传递给视图
public I2CView(int currentI2CIndex)
{
InitializeComponent();
var viewModel = (I2CViewModel) DataContext;
viewModel.CurrentI2CIndex = currentI2CIndex;
}
但我对解决方案不太满意,因为数据流路径是:父视图 -> 子视图 -> 子视图模型,而我需要它是:父视图->子视图模型
所以我在想“有没有办法在实例化视图时将数据直接传递给视图模型?”
请指教, 提前致谢
【问题讨论】:
-
你为什么在
I2CNavigatorView而不是I2CNavigatorViewModel这样做?当然,NavigatorTabs有一个像ItemsSource这样的依赖属性,您可以绑定到视图模型上的属性? -
@Haukinger
NavigatorTabs只是一个标签控件,也请你写一个答案澄清一下 -
我的评论更像是一个问题(关于你为什么将逻辑放在视图中)而不是一个答案......
-
@Haukinger,哦,我是从
I2CNavigatorView这样做的,因为我无法从视图模型实例化视图,如果我按照你提到的方式进行操作,我将不会能够将任何参数传递给我真正需要做的子视图或子视图模型 -
I can not instantiate a view from the viewmodel- 这不是DataTemplate的作用吗?
标签: c# wpf mvvm code-behind