0

これが私のxamlです:

<Window x:Class="WpfTest.Search"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Search" Height="600" Width="1024">

    <Window.Resources>
        <DataTemplate x:Key="listBoxTemplate" xmlns:ns="clr-namespace:MyConverters">
            <StackPanel Orientation="Horizontal">
                <StackPanel.Resources>
                    <ns:ImageConverter x:Key="MyImageConverter" />
                </StackPanel.Resources>
                <Image Source="{Binding Path=thumb, StringFormat=/WpfTest;component/Images/{0}, Converter={StaticResource MyImageConverter}}" Height="100" Width="130" Margin="5"></Image>
                <StackPanel Orientation="Vertical" Width="247">
                    <TextBlock Text="{Binding recipeName}" Height="60" Padding="15" FontSize="16" HorizontalAlignment="Stretch" VerticalAlignment="Center"></TextBlock>
                    <TextBlock Text="{Binding cuisine}" Height="60" Padding="15" FontSize="16" HorizontalAlignment="Stretch" VerticalAlignment="Center"></TextBlock>
                </StackPanel>
            </StackPanel>
        </DataTemplate>
    </Window.Resources>

    <Grid>
        <ListBox Margin="12,96,0,0" Name="lstSearchResult" HorizontalAlignment="Left"
                 VerticalAlignment="Top" Width="704" Height="445" ItemsSource="{Binding Tables[0]}" ItemTemplate="{StaticResource listBoxTemplate}" SelectionChanged="lstSearchResult_SelectionChanged">
        </ListBox>
        <TextBox Height="31" HorizontalAlignment="Left" Margin="12,49,0,0" Name="txtSearchRecipe" VerticalAlignment="Top" Width="518" FontSize="16" />
        <Button Content="Search" Height="31" HorizontalAlignment="Left" Margin="555,49,0,0" Name="btnSearchRecipe" VerticalAlignment="Top" Width="161" Click="btnSearchRecipe_Click" />
    </Grid>
</Window>

リストボックスをクリックしたアイテムに基づいて新しいフォームを開き、選択したアイテムのテキストブロックからのデータを新しいフォームに渡します。それ、どうやったら出来るの?

4

1 に答える 1

0

これを正しく読んでいれば、DataTemplate の TextBlock コントロールにアクセスするために特別なことをする必要はありません。TwoWay バインディングを使用して SelectedItem バインディングを ListBox に追加することで、バインディングを利用するだけです。

MVVM を使用している場合は、コマンド パラメーターとして SelectedItem を渡して、ボタン クリック イベントのコマンドをビュー モデルにマップすることをお勧めします。次に、コマンド ハンドラーで、SelectedItem を目的の型にキャストします (これは、ListBox ItemsSource にバインドしたコレクション内のオブジェクトの型である必要があります)。その後、TextBlocks にバインドされたプロパティを新しいウィンドウのビュー モデルに送信できます。適切に設定されている場合、これらのアイテムは SelectedItem に存在するはずです。次に、ウィンドウの DataContext を対応するウィンドウ ビューモデルに設定して表示します。

コード ビハインドを使用しているだけの場合は、SelectedItem を ListBox ItemsSource コレクションで使用されている型にキャストするだけです。次に、TextBlocks にバインドされたプロパティを新しいウィンドウに渡します。次に、ウィンドウを表示します。

于 2012-05-22T16:52:11.633 に答える