0

Converter を使用してコントロールに使用する DataTemplate を選択した後、バインディングを維持するのに問題があります。

私のコントロールは IAppointment のコレクションにバインドします。一部は WorkOrderAppointment 型で、一部は DowntimeAppointment 型です。タイプに基づいてツールチップを定義したいと思います。コンバーターは、型に基づいて正しい DataTemplate を選択していますが、WorkOrderToolTipTemplate および DowntimeToolTipTemplate 内のバインディングは、データ コンテキストがないかのように機能していません。

誰かが何が起こっているのか、あるいは解決策を理解するのを手伝ってくれますか?

省略された XAML:

<UserControl.Resources>
    <DataTemplate x:Key="WorkOrderToolTipTemplate">
        <Grid
            Name="WorkOrderToolTips"
            Width="400"
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="130*" />
                <ColumnDefinition Width="270*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>

            <!-- Tooltip Labels -->
            <TextBlock
                Grid.Row="0"
                HorizontalAlignment="Left"
                VerticalAlignment="Top"
                Text="Site Name:"
                />
            <TextBlock
                Grid.Row="1"
                HorizontalAlignment="Left"
                VerticalAlignment="Top"
                Text="Description:"
                />

            <!-- Tooltip Values -->
            <TextBlock
                Grid.Row="0"
                Grid.Column="1"
                HorizontalAlignment="Left"
                VerticalAlignment="Top"
                Text="{Binding Appointment.CalendarItem.SiteName}"
                TextWrapping="Wrap"
                />

            <TextBlock
                Grid.Row="1"
                Grid.Column="1"
                HorizontalAlignment="Left"
                VerticalAlignment="Top"
                Text="{Binding Appointment.CalendarItem.Description}"
                TextWrapping="Wrap"
                />

        </Grid>
    </DataTemplate>

    <DataTemplate x:Key="DowntimeToolTipTemplate">
        <Grid
            Name="DowntimeToolTips"
            Width="400"
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="130*" />
                <ColumnDefinition Width="270*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>

            <!-- Tooltip Labels -->
            <TextBlock
                Grid.Row="0"
                HorizontalAlignment="Left"
                VerticalAlignment="Top"
                Text="Site Name:"
                />
            <TextBlock
                Grid.Row="1"
                HorizontalAlignment="Left"
                VerticalAlignment="Top"
                Text="Event Classification:"
                />

            <!-- Tooltip Values -->
            <TextBlock
                Grid.Row="0"
                Grid.Column="1"
                HorizontalAlignment="Left"
                VerticalAlignment="Top"
                Text="{Binding Appointment.Downtime.PlantName}"
                TextWrapping="Wrap"
                />
            <TextBlock
                Grid.Row="1"
                Grid.Column="1"
                HorizontalAlignment="Left"
                VerticalAlignment="Top"
                Text="{Binding Appointment.Downtime.EventClassification}"
                TextWrapping="Wrap"
                />
        </Grid>
    </DataTemplate>

    <converters:ToolTipSelectorConverter x:Key="local_ToolTipSelectorConverter"
        DowntimeDataTemplate="{StaticResource DowntimeToolTipTemplate}" 
        WorkOrderDataTemplate="{StaticResource WorkOrderToolTipTemplate}" />

    <DataTemplate x:Key="AppointmentItemTemplate">
        <TextBlock
        Style="{Binding Appointment, Converter={StaticResource local_AppointmentTextStyleConverter}}"
        Text="{Binding Appointment.Subject}"
        TextTrimming="WordEllipsis"
        TextWrapping="Wrap"
        >
        <ToolTipService.ToolTip>
            <ToolTip ContentTemplate="{Binding Appointment, Converter={StaticResource local_ToolTipSelectorConverter}}" />
        </ToolTipService.ToolTip>
        </TextBlock>
    </DataTemplate>


<UserControl.Resources>
4

1 に答える 1

0

これは の標準的な問題でToolTip、ビジュアル ツリーまたは論理ツリーの一部ではないため、 を継承しませんDataContext

DataContext標準的な解決策は、のToolTipをのにバインドすることDataContextですPlacementTarget

<ToolTip 
   ContentTemplate="{Binding Appointment, Converter={StaticResource local_ToolTipSelectorConverter}}"
   DataContext="{Binding Path=PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}"
/>
于 2012-11-12T20:33:52.663 に答える