2017-09-14 1 views
0

私はItemsControlを持っています。これは私のviewmodelのリストからオブジェクトを表示しています。ユーザーがItemsControlの項目をクリックすると、Popupを表示するコードもあります。しかし私はクリックされたアイテムから実際のオブジェクトを取得してそのプロパティを読み取ってPopupに表示する方法を知らない。ItemsControlからクリックしたオブジェクトを取得し、Popupにそのプロパティを設定します。

私は(ItemsControlで私の項目を表示するために使用される)ButtonためClickイベントハンドラを持っていると私はボタンが目的のオブジェクトが含まれていますが、どうやらそうでない場合は、デバッガで見てみました。

他にどのようにオブジェクトを取得し、ポップアップにそのプロパティを設定できますか?

<ItemsControl ItemsSource="{Binding RecipientsNames}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Button x:Name="btnConvoContact" Click="BtnConvoContact_Click" 
        Background="White" Foreground="Black" Cursor="Hand" 
        Width="Auto" Height="14" Padding="0" BorderThickness="0" Margin="0 0 6 0" HorizontalAlignment="Left" VerticalAlignment="Top"> 
       <TextBlock Text="{Binding Path=Name}" FontSize="12" Margin="0 -2 0 -2"/> 
      </Button> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
+0

は、あなたのポップアップがXAMLで定義されていますか? – dymanoid

+0

クリックされたボタンは、 'DataContext'プロパティに実際のデータオブジェクトを持つ必要があります。 ItemsBoxの代わりにListBoxを使用し、ListBoxが選択範囲をサポートしているので、PopItをSelectedItemプロパティにバインドすることをお勧めします。 – ASh

+0

はい、PopupはXAMLです。 しかし、ItemsControlを設定したのと同じ方法でListBoxを設定することができます(すべてのアイテムはStackPanelに含まれています)。 ItemsControlをListBoxに置き換えるだけで十分ですか、それとももっと変更を加える必要がありますか? – Val

答えて

1

キャストデータタイプにイベントハンドラでsender引数のDataContext

private void BtnConvoContact_Click(object sender, RoutedEventArgs e) 
{ 
    Button btn = sender as Button; 
    var dataObject = btn.DataContext as YourDataClass; 
} 
+0

OK、うまくいくようです!そして、私はポップアップのDataContext( 'myPopup.DataContext = dataObject')にdataObjectを割り当て、ポップアップのXAMLでdataObjectのプロパティを参照する必要があります:' ' – Val

関連する問題