I have the Xaml which should basically bind a set of ContextualButtons for a selected tab's viewmodel to the ItemsSource property of the ToolBar. For some reason, this binding is not actually occuring unless I use Snoop to inspect the element manually...It seems that the act of snooping the element is somehow requerying the binding somehow.
Does anyone know what I might be doing wrong here? This behavior is the same if I use a Listbox as well, so I know it is something that I am doing incorrectly...but I am not sure what.
SelectedView is a bound property to the selected view from a Xam Tab control.
XAML
<ToolBar DataContext="{Binding SelectedView.ViewModel}"
     ItemsSource="{Binding ContextualButtons}" >     
     <ToolBar.ItemTemplate>
      <DataTemplate>
<!--       <Button ToolTip="{Binding Name}"-->
<!--         Command="{Binding Command}">-->
<!--        <Button.Content>-->
<!--         <Image Width="32" Height="32" Source="{Binding ImageSource}"/>-->
<!--        </Button.Content>-->
<!--       </Button>-->
       <Button Content="{Binding Name}"/>
      </DataTemplate>
     </ToolBar.ItemTemplate>
    </ToolBar>
Code
      public class TestViewModel : BaseViewModel, IBulkToolViewModel
      {
        public TestViewModel()
        {
          ContextualButtons = new ObservableCollection<IContextualButton>()
                                {
                                  new ContextualButton("Test Button",
                                                       new DelegateCommand<object>(
                                                         o_ => Trace.WriteLine("Called Test Button")), String.Empty)
                                };
        }
        public string Key { get; set; }
        private ObservableCollection<IContextualButton> _contextualButtons;
        public ObservableCollection<IContextualButton> ContextualButtons
        {
          get { return _contextualButtons; }
          set
          {
            if (_contextualButtons == value) return;
            _contextualButtons = value;
            //OnPropertyChanged("ContextualButtons");
          }
        }
      }
      public partial class TestView : UserControl, IBulkToolView
      {
        public TestView()
        {
          InitializeComponent();
        }
        public IBulkToolViewModel ViewModel { get; set; }
      }
      public class ContextualButton : IContextualButton
      {
        private string _name;
        public string Name
        {
          get { return _name; }
          set { _name = value; }
        }
        public ICommand Command { get; set; }
        public string ImageSource { get; set; }
        public ContextualButton(string name_, ICommand command_, string imageSource_)
        {
          Name = name_;
          Command = command_;
          ImageSource = imageSource_;
        }
      }
  public class BulkToolShellViewModel : BaseViewModel, IBaseToolShellViewModel, IViewModel 
  {
    private IBulkToolView _selectedView;
    public IBulkToolView SelectedView
    {
      get
      {
        return _selectedView;
      }
      set
      {
        if (_selectedView == value) return;
        _selectedView = value;
        OnPropertyChanged("SelectedView");
      }
    }
  public ObservableCollection<IBulkToolView> Views { get; set; }
    public DelegateCommand<object> AddViewCommand { get; private set; }
    public DelegateCommand<object> OpenPortfolioCommand { get; private set; }
    public DelegateCommand<object> SavePortfolioCommand { get; private set; }
    public DelegateCommand<object> GetHelpCommand { get; private set; }
    public BulkToolShellViewModel(ObservableCollection<IBulkToolView> views_)
      : this()
    {
      Views = views_;
    }
    public BulkToolShellViewModel()
    {
      Views = new ObservableCollection<IBulkToolView>();
      AddViewCommand = new DelegateCommand<object>(o_ => Views.Add(new TestView
                                                                     {
                                                                       ViewModel = new TestViewModel()
                                                                     }));
      OpenPortfolioCommand = new DelegateCommand<object>(OpenPortfolio);
      SavePortfolioCommand = new DelegateCommand<object>(SavePortfolio);
      GetHelpCommand = new DelegateCommand<object>(GetHelp);
    }
    private void GetHelp(object obj_)
    {
    }
    private void SavePortfolio(object obj_)
    {
    }
    private void OpenPortfolio(object obj_)
    {
    }
    public event PropertyChangedEventHandler PropertyChanged;
    public void RaisePropertyChanged()
    {
      throw new NotImplementedException();
    }
    public void RaisePropertyChanged(string propertyName)
    {
      throw new NotImplementedException();
    }
    public string this[string columnName]
    {
      get { throw new NotImplementedException(); }
    }
    public string Error { get; private set; }
    public AsyncContext Async { get; private set; }
    public XmlLanguage Language { get; private set; }
    public string Key { get; set; }
  }
Thanks!