如何使用IsSynchronizedWithCurrentItem将TextBox与WPF中的ListBox同步

时间:2011-06-20 13:48:02

标签: c# wpf xaml data-binding listbox

我从WPF开始,我有一个非常简单的问题:

我有一个TextBlock和一个共享相同DataContext的Listbox。 ListBox的ItemsSource设置为指向DataContext的一个属性,它是一个ObservableCollection。我希望TextBlock包含Listbox的选定项。一些代码:

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 个答案:

答案 0 :(得分:2)

如果您确实想要使用同步,则需要绑定到将由ListBox或IsSynchronizedWithCurrentItem设置为true的任何其他控件设置的集合的当前项,所以使用/

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

当源是集合视图时,可以使用斜杠(/)指定当前项。例如,子句Path = /设置绑定到视图中的当前项。当源是集合时,此语法指定默认集合视图的当前项。

当前项目由CollectionView管理,Kaxaml是原始集合之上的一个层,CollectionViews也可用于过滤,排序和分组。


一个例子(可在{{3}}中查看):

<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 :(得分:1)

尝试这样的事情

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