Есть ли запасной вариант для Dataitem = null - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь решить проблемы с производительностью. Текущий гремлин - это моя подсказка, которая выдает:

System.Windows.Data Information: 41 : BindingExpression path error: 'ViewLine3' property not found for 'object' because data item is null.  This could happen because the data provider has not produced any data yet. BindingExpression:Path=ViewLine3; DataItem=null; target element is 'TextBlock' (Name='line3ToolTip'); target property is 'Text' (type 'String')
System.Windows.Data Information: 20 : BindingExpression cannot retrieve value due to missing information. BindingExpression:Path=ViewLine3; DataItem=null; target element is 'TextBlock' (Name='line3ToolTip'); target property is 'Text' (type 'String')
System.Windows.Data Information: 21 : BindingExpression cannot retrieve value from null data item. This could happen when binding is detached or when binding to a Nullable type that has no value. BindingExpression:Path=ViewLine3; DataItem=null; target element is 'TextBlock' (Name='line3ToolTip'); target property is 'Text' (type 'String')

Для каждого элемента, который ее реализует. Я попытался заставить его замолчать, установив FallbackValue, TargetNullValue, Delay, IsAsync, но проблема остается.

<StackPanel.ToolTip>
    <ToolTip>

        <StackPanel x:Name="suiteTooltip" 
                    Width="auto">
            <TextBlock  x:Name="line3ToolTip" 
                        Text="{Binding ViewLine3, 
                        FallbackValue='NoData', 
                        TargetNullValue='NoData', 
                        Delay=500, 
                        IsAsync=True}"/>
        </StackPanel>
    </ToolTip>
</StackPanel.ToolTip>

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

Примечание. Информация по-прежнему правильно отображается на экране. Эти ошибки появляются только при создании (когда я изменяю модель, которая меняет представление, чтобы создать элемент с этой подсказкой).

1 Ответ

1 голос
/ 25 октября 2019

Вы можете использовать DataTrigger для обработки этого события. Обратите внимание, что FallBackValue используется при сбое привязки, в вашей ситуации - нет (находит свойство), поэтому вы видите, что оно не работает.

<TextBlock>
  <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="Text" Value="{Binding ViewLine3, FallbackValue='NoData', TargetNullValue='NoData', 
                    Delay=500, IsAsync=True}"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ViewLine3}" Value="{x:Null}">
                    <Setter Property="Text" Value="NoData"/>
                </DataTrigger>
                  <DataTrigger Binding="{Binding Path=ViewLine3.Length, FallbackValue=0, TargetNullValue=0}" Value="0">
                    <Setter Property="Text" Value="NoData"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>
...