Изпълнение на метода, когато е избран раздел

Имам следните класове / XAML, които дефинират моите раздели (използвайки SimpleMVVM в случай, че има значение):

Интерфейс с раздели

public interface ITabViewModel
{
    String Header { get; set; }
    Visibility Visibility { get; set; }

    void TabSelected();

}

Tabs VM

  public class TabsViewModel : ViewModelBase<TabsViewModel>
    {
        #region Properties

        public ObservableCollection<ITabViewModel> Tabs { get; set; }

        public object SelectedTabViewModel 
        {
            get
            {
                if (this._SelectedTabViewModel == null)
                {
                    _SelectedTabViewModel = Tabs[0];
                }

                return _SelectedTabViewModel;
            }
            set
            {
                if (this._SelectedTabViewModel != value)
                {
                    this._SelectedTabViewModel = value;
                    NotifyPropertyChanged(m => m.SelectedTabViewModel);
                }
            }
        }
        private object _SelectedTabViewModel;


        #endregion Properties

        #region Constructors

        // Default ctor
        public TabsViewModel() 
        {
            Tabs = new ObservableCollection<ITabViewModel>();

            Tabs.Add((App.Current.Resources["Locator"] as ViewModelLocator).PropertiesViewModel);
            Tabs.Add((App.Current.Resources["Locator"] as ViewModelLocator).SystemSetupViewModel);

        }
}

Tabs User Control

<UserControl x:Class="AutomatedSQLMigration.Views.TabsUserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:v="clr-namespace:AutomatedSQLMigration.Views"
             xmlns:vm="clr-namespace:AutomatedSQLMigration.ViewModels"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300"

             DataContext="{Binding TabsViewModel, Source={StaticResource Locator}}">

    <TabControl ItemsSource="{Binding Tabs}"
                SelectedItem="{Binding SelectedTabViewModel}">

        <TabControl.Resources>
            <DataTemplate DataType="{x:Type vm:PropertiesViewModel}">
                <v:PropertiesUserControl />
            </DataTemplate>


            <DataTemplate DataType="{x:Type vm:SystemSetupViewModel}">
                <v:SystemSetupUserControl />
            </DataTemplate>
        </TabControl.Resources>

        <TabControl.ItemContainerStyle>
            <Style TargetType="TabItem">
                <Setter Property="Header" Value="{Binding Header}" />
                <Setter Property="Width" Value="120" />
            </Style>

        </TabControl.ItemContainerStyle>

    </TabControl>

</UserControl>

Properties VM

...
        public void TabSelected()
        {
            Log.Write(LogLevel.Debug, "Selected tab 'Rules'");
        }
...

Бих искал да свържа това така, че когато разделът е избран, методът TabSelected() се задейства за избрания раздел. Може ли някой да даде пример как се прави това?

Намерих друга публикация, който споменава този метод:

TabItem item = new TabItem();
MyCustomControl mcc = new MyCustomControl();
item.Content = mcc;

Selector.AddSelectedHandler(item, (s,e) =>
{
    selectedControl = mcc;
}); 

но не съм сигурен как бих приложил това? Бих ли приложил това към TabControl VM или всеки отделен потребителски контрол VM?


person BrianKE    schedule 18.09.2014    source източник


Отговори (1)


Какво ще кажете за добавяне на реда в избрания инструмент за настройка на раздели:

this._SelectedTabViewModel.TabSelected();
person nvoigt    schedule 18.09.2014
comment
Благодаря ви, трябваше леко да модифицирам това, но работи: ((ITabViewModel)this.SelectedTabViewModel).TabSelected(); - person BrianKE; 18.09.2014