I have a MainWindow which has a UserControl.
The MainWindow is bound to a ViewModel which is it's DataContext.
Now using the MainWindowViewModel, I want to bind certain controls in the UserControl.
The UserControl has a DependencyProperty for each element that I want to Bind .
From the MainWindow I am Binding the DependencyProperties of the UserControl to the MainWindowViewModel, but bindings aren't working.
MainWindow XAML:
<Grid >
<userControls:MultiSelectEnvironmentContextControl EnvironmentVersions="{Binding EnvironmentVersions}" x:Name="MultiSelectEnvironmentContextControl" Margin="10" />
</Grid>
UserControl XAML:
<ComboBox Grid.Column="0" Grid.Row="0" x:Name="ComboBoxVersions" SelectedIndex="0" Margin="10" ItemsSource="{Binding EnvironmentVersions}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Version " />
<TextBlock Text="{Binding}" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
UserControl Code behind:
public partial class MultiSelectEnvironmentContextControl
{
public MultiSelectEnvironmentContextControl()
{
InitializeComponent();
this.DataContext = this;
}
public IEnumerable<string> EnvironmentVersions
{
get { return (IEnumerable<string>)GetValue(EnvironmentVersionsProperty); }
set { SetValue(EnvironmentVersionsProperty, value); }
}
// Using a DependencyProperty as the backing store for EnvironmentVersions. This enables animation, styling, binding, etc...
public static readonly DependencyProperty EnvironmentVersionsProperty =
DependencyProperty.Register("EnvironmentVersions", typeof(IEnumerable<string>), typeof(MultiSelectEnvironmentContextControl), new PropertyMetadata(default(IEnumerable<string>)));
}
MainWindow ViewModel:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;
using Geico.Applications.Business.CoverageTestHarness.DomainLayer;
namespace Geico.Applications.Business.CoverageTestHarness.UIWPF.ViewModels
{
class TestRunnerControlViewModel: ViewModelBase
{
private DomainFacade domainFacade;
/// <summary>
/// Initializes a new instance of the <see cref="TestRunnerControlViewModel"/> class.
/// </summary>
public TestRunnerControlViewModel()
{
domainFacade = ((App) Application.Current).DomainFacade;
}
/// <summary>
/// Gets the environment versions.
/// </summary>
/// <value>
/// The environment versions.
/// </value>
public IEnumerable<string> EnvironmentVersions
{
get
{
return domainFacade.GetEnvironmentVersions();
}
}
}
}