0

私の問題の概要を簡単に説明します。

データコンテキストとしてViewModelを持つウィンドウがあります。このウィンドウには、2つのユーザーコントロールもあります。これらのユーザーコントロールには、ViewModelのプロパティにバインドするさまざまなxamlオブジェクトがあり、他のプロパティに問題はありません。

私が抱えている問題は、私が作成したデータトリガーが起動しないことです。以下に、私が試したデータトリガーのxamlを示します。

注: IsBoldは、ウィンドウに使用しているViewModel内のプロパティです。ウィンドウ内のユーザーコントロールは親からデータコンテキストを継承するという印象を受けているので、それは私の問題ではないと思います。

<ScrollViewer >
        <ListBox
            ItemsSource="{Binding Path=Listings}"
            SelectionMode="Single"
            SelectedValue="{Binding Path=SelectedListingItemID}"
            SelectedValuePath="ItemID"
            Grid.IsSharedSizeScope="True">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <TextBlock>
                            <TextBlock.Style>
                                <Style TargetType="TextBlock">
                                    <Setter Property="Text" Value="NotTriggered" />
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding Path=IsBold}" Value="True">
                                            <Setter Property="Text" Value="Triggered" />
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </TextBlock.Style>
                        </TextBlock>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </ScrollViewer>

これを実行すると、次の出力ステートメントが得られます。

BindingExpressionパスエラー:「DataContext」プロパティが「オブジェクト」「DataRowView」に見つかりません

このメッセージは、プロパティがListBoxItemではなくViewModelからのものであることを認識できるように、データトリガーをxamlの別の部分に移動する必要があると私に信じさせますが、どこに移動しますか?それとも、それは正しいことでさえありますか?

必要なすべての分野で十分に明確になっていることを願っていますが、そうでない場合は、必要に応じて確実に詳しく説明できます。

ご協力いただきありがとうございます!

4

1 に答える 1

0

最も簡単な方法は、相対ソース プロパティを使用することです。次のように、FindAncestor モードと Window の AncestorType を使用して、ウィンドウの dataContext から IsBold を確認できます。

<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}, Path=IsBold}" Value="True">
    <Setter Property="Text" Value="Triggered" />
</DataTrigger>
于 2012-08-16T16:27:06.227 に答える