2016-01-14 3 views
0

Я хотел бы привязать Textblock.Text к свойству класса, которое я сделал, но когда это значение равно null, я хотел бы использовать новое свойство, и если это значение null , затем заданное по умолчанию значение. Я думал, что для этого нужно PriorityBinding?Множественные цели привязки, если одно значение имеет значение null

<TextBlock.Text> 
    <PriorityBinding> 
      <Binding Path="Property1"/> 
      <Binding Path="Property2"/> 
      <Binding Source="---"/> 
    </PriorityBinding> 
</TextBlock.Text> 
+0

Это просто предложение, я не пробовал, работает ли оно, но вы можете попробовать со стилем и триггерами, поэтому, если Property1 value = null, тогда у вас есть сеттер, привязывающий текст к свойству property2 – adminSoftDK

ответ

3

null является допустимым значением для Textblock.Text собственности, поэтому он никогда не будет использовать любого из других привязок.

От MSDN:

PriorityBinding позволяет связать свойство связывания целевой (цель) список привязок. Первой привязкой, которая возвращает значение , успешно становится активной привязкой.

А вяжущие возвращает значение успешно, если:

  1. Путь к источнику связывания решает успешно.

  2. Преобразователь значений, если он есть, способен преобразовывать полученное значение.

  3. Результирующее значение действительно для целевого объекта.

Значение DependencyProperty.UnsetValue не считается успешным возвращаемое значение.


Вы можете добавить связывающую конвертер, который возвращает DependencyProperty.UnsetValue, когда значение свойства null:

public class NullValueConverter : IValueConverter 
{ 
    public object Convert(
     object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return value ?? DependencyProperty.UnsetValue; 
    } 
    ... 
} 
+0

'DependencyProperty.UnsetValue' это то, что вы не можете вернуть из свойства string, которое является типом привязки, который мы обычно используем для свойства Text. –

+0

@SriramSakthivel правильный. 'DependencyProperty.UnsetValue' - это объект, который не является допустимым типом возврата для строки. Поэтому вопрос остается. – user3791372

+0

Я думаю, что «правильный» способ - использовать конвертер привязки. См. Мое редактирование. – Clemens

0

Бросив исключение вызовет свойство не может быть решена, тем самым позволяя PriorityBind ИНГ перейдите к следующему связыванию.

+0

Из статьи MSDN по [Бросок исключений] (https://msdn.microsoft.com/en-us/library/ms229030 (v = vs.100) .aspx): * Не используйте исключения для нормальный поток контроля ... * – Clemens

Смежные вопросы