2011-07-29 7 views
7

私は2つのユーザーコントロールを持っています。リストアボックスは、顧客ごとに簡単な詳細を表示するリストボックスにバインドされています。WPF - ユーザーコントロール間のリストボックスの選択項目にバインド

第2のユーザーコントロール第1のユーザーコントロールのリストボックスで選択した顧客の詳細を表示したいと思います。

最初のユーザーコントロールで選択した項目にバインドするために2番目のコントロールでバインドを設定することはできますか?

マイリストボックス:

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

おかげ グレッグ

+1

[テキスト=「{バインディング名}」に結合するあなたのTextBlockを変更する場合は、動作するはずですが何をしています。顧客のプロパティ宣言で "名前"を "プロパティ"として識別し、それをいくつかの "ルール"に従うように変更することをお勧めします。 – Dun

答えて

3

は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

はい、することができます - あなたは、リストボックスにCUSTOMERLISTの名前を与えた場合"{Binding ElementName = CustomerList、Path = SelectedItem}"のようなバインディングを使用してSelectedItemプロパティにバインドできます。私はCustomerオブジェクトのあなたのViewModelにプロパティを持つことを示唆している

+1

@マーク。あなたのソリューションは、両方のリストボックスが同じユーザーコントロールにある場合に機能します。 gregのごとく、bthリストボックスは異なったユーザコントロールになっていることが非常にはっきりしています – Bathineni

+0

@greg ..別のユーザコントロールまたはWindowで両方のユーザコントロールを使用していますか?可能であれば、ur xamlコードを公開しようとしてください。簡略化されたものが1つあります – Bathineni

+0

@bathineniはい両方のユーザーコントロールが同じユーザーコントロールで使用され、一度に1つのインスタンスしか存在しません。私は元の質問に詳細ビューのユーザーコントロールのxamlを投稿しました –

関連する問題