如何解决实例化多个视图并将数据传递给每个视图
我有一个棱镜应用程序,我根据视图模型中的属性在父视图的代码隐藏中实例化多个视图
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;
}
但是我对解决方案不是很满意,因为数据流的路径是:父视图->子视图-> 子视图模型,而我需要它是:父视图 -> 子视图模型
所以我在想“有没有办法在实例化视图时将数据直接传递给视图模型?”
请指教, 提前致谢
解决方法
我将从视图模型开始:
internal class I2CNavigatorViewModel
{
public IReadOnlyCollection<I2CViewModel> MyItems { get; }
}
<TabControl ItemsSource="{Binding MyItems}">
<TabControl.ContentTemplate>
<DataTemplate>
<I2CView />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
然后用子视图模型初始化 MyItems
,用你需要的所有参数创建。
Rant:class
不想让它的名字以 I
开头,因为它不喜欢被误认为是 interface
!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。