English 中文(简体)
How to bind a TabControl to an ObservableCollection in XAML
原标题:

I have the following line of code in my code-behind class.

TabControl.ItemsSource = ((MainWindowViewModel)DataContext).TabItemViewModels;

I would like to move this to the XAML file.

In brief,

  • There is a MainWindow class representing the main-window.
  • There is a TabControl placed on the main-window.
  • There are 2 view-models called MainWindowViewModel and TabItemViewModel.
  • MainWindowViewModel has an observable collection of TabItemViewModel classes.
  • MainWindowViewModel is the view-model class for the main window.
  • TabItemViewModel is the view-model class for each individual tab in the TabControl on the main window.
  • The DataContext property of the MainWindow class is set to an instance of the MainWindowViewModel class, instantiated in XAML.

What I want to do is bind the TabItemViewModels property of the MainWindowViewModel class to the ItemSources property of the TabControl.

I am looking for not just a line of code, but also some pointers on the syntax for Bindings as I am totally lost with it and it seems to be pretty crucial to working with XAML.

最佳回答

First the line of code you re not looking for:

<TabControl ItemsSource="{Binding TabItemViewModels}" ... />

How does this tie into the syntax for bindings? A binding with no Source, ElementName or RelativeSource automatically refers to the DataContext. In your case the MainWindow.DataContext is the MainWindowViewModel that has the TabItemViewModels property. (DataContext propagates down the visual tree, so the TabControl inherits the same DataContext as the containing MainWindow.) So you can just reference that property by name.

For more info and syntax see Data Binding Overview, Binding Sources Overview and Binding Declarations Overview in MSDN.

问题回答

暂无回答




相关问题
WPF convert 2d mouse click into 3d space

I have several geometry meshes in my Viewport3D, these have bounds of (w:1800, h:500, d:25). When a user clicks in the middle of the mesh, I want the Point3D of (900, 500, 25)... How can I achieve ...

Editing a xaml icons or images

Is it possible to edit a xaml icons or images in the expression design or using other tools? Is it possible to import a xaml images (that e.g you have exported) in the expression designer for editing?...

WPF: writing smoke tests using ViewModels

I am considering to write smoke tests for our WPF application. The question that I am faced is: should we use UI automation( or some other technology that creates a UI script), or is it good enough to ...

WPF - MVVM - NHibernate Validation

Im facing a bit of an issue when trying to validate a decimal property on domain object which is bound to a textbox on the view through the viewmodel. I am using NHibernate to decorate my property on ...

How do WPF Markup Extensions raise compile errors?

Certain markup extensions raise compile errors. For example StaticExtension (x:Static) raises a compile error if the referenced class cannot be found. Anyone know the mechanism for this? Is it baked ...

WPF design-time context menu

I am trying to create a custom wpf control, I m wondering how I can add some design-time features. I ve googled and can t seem to get to my goal. So here s my simple question, how can I add an entry ...

How to combine DataTrigger and EventTrigger?

NOTE I have asked the related question (with an accepted answer): How to combine DataTrigger and Trigger? I think I need to combine an EventTrigger and a DataTrigger to achieve what I m after: when ...

热门标签