WPF - привязка к выбранному элементу списка между пользовательскими элементами управления - PullRequest
8 голосов
/ 29 июля 2011

У меня есть два пользовательских элемента управления, первый со списком, который привязан к списку клиентов, который отображает некоторые простые сведения для каждого клиента.

Второй пользовательский элемент управления, который я хотел бы представить более детально.какой бы клиент ни был выбран в списке первого пользовательского элемента управления.

Можно ли установить привязку во втором элементе управления для привязки к выбранному элементу в первом пользовательском элементе управления?

Мой списокbox:

            <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 ]

4 голосов
/ 29 июля 2011

Я бы предложил иметь свойство в вашем объекте ViewModel объекта Customer, скажем 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 голос
/ 29 июля 2011

Да, вы можете - если вы дадите списку имя CustomerList, то вы можете привязать его свойство SelectedItem, используя привязку, например "{Binding ElementName = CustomerList, Path = SelectedItem}".

...