Как синхронизировать TextBox с ListBox в WPF с помощью IsSynchronizedWithCurrentItem - PullRequest
0 голосов
/ 20 июня 2011

Я начинаю с WPF, и у меня есть довольно простой вопрос:

У меня есть TextBlock и Listbox, которые используют один и тот же DataContext.ItemsSource объекта ListBox устанавливается так, чтобы он указывал на свойство DataContext, которое является его ObservableCollection.Я хочу, чтобы TextBlock содержал выбранный элемент списка.Некоторый код:

View view = new View();
view.DataContext = new ViewModel();
view.Show();
<TextBlock Name="textBox1" Grid.Row="0" Grid.Column="0" Margin="1" Text="{Binding ¿xxx?}"></TextBlock>
<ListBox Name="listBox1" Grid.Row="1" Grid.ColumnSpan="2" Margin="1" ItemsSource="{Binding Model.BinariesToDeploy}" IsSynchronizedWithCurrentItem="True" />

Надеюсь, что все ясно.

Ответы [ 2 ]

2 голосов
/ 20 июня 2011

Если вы действительно хотите использовать синхронизацию, вам нужно привязать текущий элемент коллекции, который будет установлен ListBox или любым другим элементом управления, для которого IsSynchronizedWithCurrentItem установлено на true, для этого используйте 1003 * * * 1004

<TextBlock Text="{Binding Model.BinariesToDeploy/}" />

Когда источником является представление коллекции, текущий элемент может быть указан косой чертой (/). Например, предложение Path = / устанавливает привязку к текущему элементу в представлении. Когда источником является коллекция, этот синтаксис указывает текущий элемент представления коллекции по умолчанию.

Текущим элементом управляет CollectionView, который является слоем поверх вашей исходной коллекции. CollectionViews также можно использовать для фильтрации, сортировки и группировки.


Пример (можно посмотреть в Kaxaml ):

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Page.Resources>
        <x:Array x:Key="items" Type="{x:Type Label}">
            <Label Content="Apple" Tag="Fruit"/>
            <Label Content="Pear" Tag="Fruit"/>
            <Label Content="Orange" Tag="Fruit"/>
            <Label Content="Lime" Tag="Fruit"/>
            <Label Content="Tomato" Tag="Vegetable"/>
            <Label Content="Radish" Tag="Vegetable"/>
            <Label Content="Lettuce" Tag="Vegetable"/>
        </x:Array>
    </Page.Resources>
    <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
        <StackPanel>
            <ListBox IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Source={StaticResource items}}"/>
            <!-- Binds to CurrentItem.Content -->
            <ContentControl Content="{Binding /Content,Source={StaticResource items}}"/>
        </StackPanel>
    </ScrollViewer>
</Page>
1 голос
/ 20 июня 2011

попробуйте что-то вроде этого

Text = "{Binding ElementName=listBox1, Path=SelectedValue.Content}"
...