Не удалось установить родительский datacontext для всплывающей подсказки datatemplate

#c# #wpf #xaml

#c# #wpf #xaml

Вопрос:

Не удалось установить родительский datacontext для всплывающей подсказки datatemplate.

Ниже приведен код xaml. Только один раз в поле со списком и в поле со списком datatemplate добавлено текстовое поле.

Xaml

 <UserControl x:Class="WpfApplication1.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             Name="UC"
             d:DesignHeight="50" d:DesignWidth="200">
    <Grid>
        <ComboBox Width="200" Height="50" ItemsSource="{Binding Coll}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Length}">
                        <TextBlock.ToolTip>
                            <ToolTip Content="{Binding Path=DataContext.ToolTipValue, 
                                                       RelativeSource={RelativeSource FindAncestor, 
                                                       AncestorType={x:Type UserControl}}}"/>
                        </TextBlock.ToolTip>
                    </TextBlock>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>
    </Grid>
</UserControl>
  

ViewModel

     private List<string> _coll;

    public List<string> Coll
    {
        get { return _coll; }
        set { _coll = value; OnPropertyChanged(); }
    }

    private string _ToolTipValue;

    public string ToolTipValue
    {
        get { return _ToolTipValue; }
        set { _ToolTipValue = value; OnPropertyChanged(); }
    }

    public ViewModel()
    {
        _coll = new List<string>(){ "1", "2", "3"};
        _ToolTipValue = "Demo";
    }
  

Не могли бы вы, пожалуйста, помочь мне, почему DataContext не установлен.

Это проблема привязки?

Комментарии:

1. вам нужно вызвать ToolTipValue = "something , чтобы запустить его установщик, и OnPropertyChanged вы не должны взаимодействовать с частными свойствами.

2. Не могли бы вы, пожалуйста, уточнить это, я установил значение для частного поля в конструкторе. Он отлично работает для combox itemsource

3. Согласен, это работает. представьте, что вы меняете значения позже. свойство private не будет обновлять измененное свойство!

4. можете ли вы добавить немного больше xaml, пожалуйста. По крайней мере, usercontrol, на который вы ссылаетесь

5. Просто я пробую демонстрационный пример, но не смог установить текст всплывающей подсказки

Ответ №1:

если вам не нужны какие-либо специальные вещи, старайтесь не вставлять всплывающую подсказку:

 <TextBlock ToolTip="{Binding DataContext.ToolTipValue, 
                     RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"
           Text="{Binding Length}"/>
  

Комментарии:

1. Спасибо, понял, но могу я узнать, почему это не работает в моем коде?

2. @суперпользователь, если честно.. Я понятия не имею .. : D