Получение свойства с MVVM, привязкой и шаблоном - PullRequest
0 голосов
/ 14 февраля 2012

Я использую привязку для передачи данных из ViewModel в Template, но я хочу перенести данные из Teample в ViewModel.

<TabControl Grid.Row="2" ItemsSource="{Binding List}" IsSynchronizedWithCurrentItem="True">
        <TabControl.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Name}" />
            </DataTemplate>
        </TabControl.ItemTemplate>

        <TabControl.ContentTemplate>
            <DataTemplate>
                <ContentControl Content="{Binding Content}"/>
            </DataTemplate>
        </TabControl.ContentTemplate>
    </TabControl>

Я хочу получить (с привязкой) TabIndex текущего создания TabItem.
Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 14 февраля 2012

Самый простой способ сделать это - подключиться к представлению ICollectionView, поскольку для IsSynchronisedToCurrentItem установлено значение true.

НЕПРОВЕРЕННЫЙ ПРИМЕР

public ObservableCollection<object> List {get; set;}

public int SelectedIndex
{
    get { return CollectionViewSource.GetDefaultView(List).CurrentPosition; }
    set { CollectionViewSource.GetDefaultView(List).MoveCurrentTo(value); }
}

Затем вы можете привязать свойство SelectedIndex в вашей ViewModel.

Если это не сработает, привяжите Непосредственно к ListCollectionView в вашей ViewModel вместо простой ObservableCollection и замените MyListCollectionView на CollectionViewSource.GetDefaultView (List) в приведенном выше коде.

1 голос
/ 14 февраля 2012

Я не уверен, что понимаю, какое свойство вы пытаетесь передать ViewModel из вашего шаблона.Но в основном, если вы хотите передать значение из вашего шаблона в модель представления, вы должны сделать это в режиме привязки «OneWayToSource» или «TwoWay».

Если я правильно понял и к чему вы привязалипередать в вашу модель представления индекс текущего выбранного элемента TabItem, вы можете сделать это следующим образом -

<TabControl Grid.Row="2" ItemsSource="{Binding List}" IsSynchronizedWithCurrentItem="True" SelectedIndex={Binding SelectedIndex, Mode="OneWayToSource">

(обратите внимание, что в вашей модели представления также должно быть свойство зависимости SelectedIndex)

Хотя в соответствии с MSDN режим привязки этого свойства по умолчанию "TwoWay", поэтому вам не нужно указывать режим привязки.

http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.selector.selectedindex.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...