Как я могу отслеживать DataContext выбранного TabPage из моей ViewModel? - PullRequest
1 голос
/ 16 ноября 2011

У меня есть класс TabItem:

 public class TabItem
{
    public string Header { get; set; }
    public IView Content { get; set; }
}

и в моей модели:

 public ObservableCollection<TabItem> Tabs
    {
        get { return _tabs; }
        set
        {
            if(_tabs!=value)
            {
                _tabs = value;
                RaisePropertyChanged("Tabs");
            }
        }
    }

    public TabItem CurrentTabItem
    {
        get { return _currentTabItem; }
        set
        {
            if (_currentTabItem != value)
            {
            }
            _currentTabItem = value;
            RaisePropertyChanged("CurrentTabItem");
        }
    }

В представлении я привязан к ModelView:

<TabControl x:Name="shellTabControl" ItemsSource="{Binding Tabs}" 
            IsSynchronizedWithCurrentItem="True" SelectionChanged="ShellTabControlSelectionChanged">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Header}"/>
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <ContentPresenter Content="{Binding Content}"/>
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>

view Я хочу изменить свойство CurrentTabItem ViewModel:

 private void ShellTabControlSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if(e.Source is TabItem)
        {
            var tabItem = e.Source as TabItem;
            ViewModel.CurrentTabItem = tabItem; //don't work
        }
    }

Каков наилучший подход для преобразования TabItem TabControl в мой TabItem?

Ответы [ 2 ]

1 голос
/ 16 ноября 2011

Может быть, лучше использовать SelectedItem = "{Binding CurrentTabItem, Mode = TwoWay, UpdateSourceTrigget = PropertyChanged}"?

0 голосов
/ 16 ноября 2011
<TabControl x:Name="shellTabControl" ItemsSource="{Binding Tabs}" 
          IsSynchronizedWithCurrentItem="True"
          SelectionChanged="ShellTabControlSelectionChanged" 
          SelectedItem={Binding Path=CurrentTabItem,Mode=Twoway}>      
  <TabControl.ItemTemplate>          
    <DataTemplate>              
      <TextBlock Text="{Binding Header}"/>          
    </DataTemplate>      
  </TabControl.ItemTemplate>      
 <TabControl.ContentTemplate>          
   <DataTemplate>              
     <ContentPresenter Content="{Binding Content}"/>          
   </DataTemplate>      
 </TabControl.ContentTemplate>  
</TabControl>  

Это даст вам выбранный TabItem .......

Также измените имя вашего пользовательского "TabItem", это сбивает с толку;)

...