[英]Reuse UserControl in TabControl with Various ViewModels
我有一个用户控件,我想将其与多个实现相同接口的ViewModel重用。 我想将这些嵌入在TabControl中。
目前,我可以为单个实例执行此操作,但是我正在努力重用UserControl。 对于单个实例,我可以将ViewModel绑定到UserContol的xaml中,也可以在后面的代码中实例化它,但是我不知道如何从更高级别进行设置。
这就是我所拥有的
<TabControl HorizontalAlignment="Left" Height="800" Margin="0,0,0,0" VerticalAlignment="Top" Width="600">
<TabItem Header="Tab1">
<Frame Source="SomeUserControl.xaml" BorderThickness="0" Margin="0" />
</TabItem>
</TabControl>
这是我想要实现的伪代码,
<TabControl>
<TabItem Header="Tab1">
<Frame Source="{SomeUserControl.xaml, DataContext=ViewModel1}" />
</TabItem>
<TabItem Header="Tab2">
<Frame Source="{SomeUserControl.xaml, DataContext=ViewModel2}" />
</TabItem>
</TabControl>
谢谢!
无需对选项卡进行硬编码,而是绑定到“ item”类的ObservableCollection。 即像
class MyTabItems : INotifyPropertyChanged
{
public string Header...
public object DataContext...
}
创建一个:
ObservableCollection<MyTabItems>
将TabControl ItemsSource绑定到ObservableCollection。 在TabControl的项目模板中,将Header绑定到Header属性,将DataContext绑定到DataContext属性。 可以在模板中对源进行硬编码,也可以在项目类中添加另一个属性,如果需要更大的灵活性,可以将其绑定到该类。
多亏了SledgeHammer的回答,我才能够采用另一种方法并使工作正常。
<TabControl Name="TabControl" ItemsSource="{Binding TabItems}" HorizontalAlignment="Left" Height="800" Margin="0,0,0,0" VerticalAlignment="Top" Width="600">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Header}"/>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<UserControl Content="{Binding DataContext}"/>
</DataTemplate>
</TabControl.ContentTemplate>
TabItems已填充在与上述xaml相关的代码中。
this.TabItems = new ObservableCollection<TabItem>
{
new TabItem("Main", new MainControl()),
new TabItem("Tab1", new GenericTabControl(new ViewModel1())),
new TabItem("Tab2", new GenericTabControl(new ViewModel2()))
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.