WPF - 绑定到用户控件之间列表框的选择项

时间:2011-07-29 14:27:44

标签: wpf data-binding user-controls listbox selecteditem

我有两个用户控件,第一个带有一个列表框,该列表框绑定到一个客户列表,显示每个客户的一些简单细节。

第二个用户控件我希望能够更详细地查看在第一个用户控件的列表框中选择的客户。

是否可以在第二个控件中设置绑定以绑定到第一个用户控件中的选定项?

我的列表框:

            <ListBox Name="lstCustomer" ItemsSource="{Binding Customers}" >           
                <ListBox.Resources>

                    <DataTemplate DataType="{x:Type MyApplication:Customers}">
                       <Label Grid.Row="0" Content="{Binding Customer.name}" FontSize="14" FontWeight="Bold" Padding="5" />                             
                                <Label Grid.Row="1" Grid.Column="0" Content="{Binding Customer.telephone}" Padding="10,5" />                 
                            </Grid>
                        </Grid>

                    </DataTemplate>
                </ListBox.Resources>
            </ListBox>

详细视图Usercontrol(迄今为止)

 <Grid x:Name="containingGrid" DataContext="{Binding ElementName=lstCustomers, Path=SelectedItem}">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="{Binding Customer.name}" FontSize="23"/>
        </Grid>

由于 格雷格

2 个答案:

答案 0 :(得分:4)

我建议在Customer对象的ViewModel中有一个属性说SelectedCustomer并将它绑定到列表框的SelectedItem,如下所示 -

<ListBox Name="lstCustomer" ItemsSource="{Binding Customers}"
                            SelectedItem = "{Binding SelectedCustomer}" >           
               . . . . .
 </ListBox>

由于您提到两个用户控件都在同一个视图中,所以我假设它们共享一个相同的ViewModel。在这种情况下,您可以通过这种方式简单地设置数据上下文 -

<Grid x:Name="containingGrid" DataContext="{Binding SelectedCustomer}">
  <Grid.RowDefinitions>
       <RowDefinition Height="Auto"/>
       <RowDefinition Height="Auto"/>
       <RowDefinition Height="Auto"/>
   </Grid.RowDefinitions>
   <Grid.ColumnDefinitions>
       <ColumnDefinition Width="Auto"/>
       <ColumnDefinition Width="Auto"/>
   </Grid.ColumnDefinitions>
   <TextBlock Text="{Binding Name}" FontSize="23"/>
</Grid> 

答案 1 :(得分:1)

是的,您可以 - 如果您为列表框指定了CustomerList的名称,那么您可以使用类似“{Binding ElementName = CustomerList,Path = SelectedItem}”的绑定绑定到其SelectedItem属性。