0

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

我有一个 TextBlock 和一个 Listbox 共享相同的 DataContext。ListBox 的 ItemsSource 设置为指向 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" />

希望它清楚。

4

2 回答 2

2

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

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

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

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


一个例子:

<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>
于 2011-06-20T15:27:21.467 回答
1

尝试这样的事情

Text = "{Binding ElementName=listBox1, Path=SelectedValue.Content}"
于 2011-06-20T13:53:18.823 回答