Noi*_*ich 2 data-binding wpf tabcontrol
在我们当前的项目中,我们有一个主窗口,其中包含多个视图(每个视图都有自己的视图模型),这些视图在选项卡控件中显示为项目。例如:一个选项卡项是一个编辑器,包含如下的编辑器视图:
<TabItem Header="Test Editor">
<TestEditor:TestEditorView DataContext="{Binding TestEditorViewModel}"/>
</TabItem>
Run Code Online (Sandbox Code Playgroud)
另一个显示结果:
<TabItem Header="Results Viewer">
<ResultViewer:ResultViewer x:Name="resultViewer1" DataContext="{Binding Path=ResultViewModel}" />
</TabItem>
Run Code Online (Sandbox Code Playgroud)
等等。
我想将 TabItems 绑定到主窗口视图模型中的某些内容,但我不知道如何在不破坏 MVVM 模式的情况下将视图的名称绑定到任何属性。我想要一些类似的东西:
<TabControl.ContentTemplate>
<DataTemplate>
<TestEditor:TestEditorView DataContext ="{Binding TabDataContext}"/>
</DataTemplate>
</TabControl.ContentTemplate>
Run Code Online (Sandbox Code Playgroud)
只需要一些绑定,而不必在设计时知道什么类型将用作内容。
有任何想法吗?
通常我将 TabControl 的 Tabs 存储在ViewModel, 以及SelectedIndex, 然后我DataTemplates用来确定View要显示的
看法:
<Window>
<Window.Resources>
<DataTemplate DataType="{x:Type ResultViewModel}">
<ResultViewer:ResultViewer />
</DataTemplate>
<DataTemplate DataType="{x:Type EditorViewModel}">
<TestEditor:TestEditorView />
</DataTemplate>
</Window.Resources>
<TabControl ItemsSource="{Binding TabCollection}"
SelectedIndex="{Binding SelectedTabIndex}" />
</Window>
Run Code Online (Sandbox Code Playgroud)
视图模型:
public class MyViewModel : ViewModelBase
{
publicMyViewModel()
{
TabCollection.Add(new ResultsViewModel());
TabCollection.Add(new EditorViewModel());
SelectedTabIndex = 0;
}
private ObservableCollection<ViewModelBase> _tabCollection
= new ObservableCollection<ViewModelBase>();
public ObservableCollection<ViewModelBase> TabCollection
{
get { return _tabCollection };
}
private int _selectedTabIndex;
public int SelectedTabIndex
{
get { return _selectedTabIndex; }
set
{
if (value != _selectedTabIndex)
{
_selectedTabIndex = value;
RaisePropertyChanged("SelectedTabIndex");
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5168 次 |
| 最近记录: |