Связывание со вторым свойством, если первое не определено - PullRequest
7 голосов
/ 23 ноября 2011

Я не буду копировать / вставлять весь мой файл xaml. Это будет слишком долго объяснять, но вот что интересно: я получил привязку свойства "Имя"

<TextBlock Text="{Binding Name}"/>

Дело в том, что иногда мой предмет не имеет свойства "Имя". Он не падает, но я просто получил пустой текст в моем TextBlock

То, что я хотел бы сделать, если имя пусто, это связать с «ничто», просто {Binding}. Это покажет мое имя объекта, и это будет идеально!

Заранее спасибо за любую помощь, и извините, если это вопрос новичка: (

Ответы [ 4 ]

7 голосов
/ 23 ноября 2011

Здесь требуется PriorityBinding .

В частности, это будет выглядеть примерно так (точный синтаксис может потребовать некоторой проверки):

         <TextBlock>
            <TextBlock.Text>
                <PriorityBinding>
                    <Binding Path="Name"/>
                    <Binding />
                </PriorityBinding>
            </TextBlock.Text>
         </TextBlock>

Примечаниечто это в особенности откатывается, когда свойство Name недоступно для связываемого объекта;если свойство Name имеет пустое строковое значение, я считаю, что оно по-прежнему будет использовать это пустое значение.

3 голосов
/ 23 ноября 2011

Вы можете применить стиль с DataTrigger:

<TextBlock>
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Setter Property="Text" Value="{Binding Name}"/>
            <Style.Triggers>
                <!-- In this binding you could inject a converter which checks for more than null -->
                <DataTrigger Binding="{Binding Name}" Value="{x:Null}">
                     <Setter Property="Text" Value="{Binding}"/>
                </DataTrigger>
            <Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>
0 голосов
/ 23 ноября 2011

Это теоретически, но ..

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

Style x:Key="TwitterTextBoxStyle" TargetType="{x:Type TextBox}">
    <Setter Property="Text" Value="" />
0 голосов
/ 23 ноября 2011

Если вам не нужно привязываться к имени типа объекта, вы можете использовать TargetNullValue, который даст вам значение по умолчанию, если свойство привязки равно нулю, например:

<TextBlock Text="{Binding Name, TargetNullValue=Default}" />

Если вам действительно нужно имя типа объекта, я бы предложил написать конвертер (реализовать IValueConverter). Дайте мне знать, если вам нужен примерный конвертер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...