Вложенное связывание XAML StringFormat - PullRequest
2 голосов
/ 11 августа 2010

Я пытаюсь отобразить адресную метку. то, что я хочу, это если AddresssLine2 не является пустой строкой (она никогда не равна NULL), она должна отображать ее, затем новую строку (я использую VB, поэтому его & # x0a), в противном случае просто отобразить AddressLine2, который является пустой строкой Essense это игнорируется. однако StringFormat внутренней привязки AddressLine2 полностью игнорируется. он просто отображает значение AddressLine2 и игнорирует StringFormat. Я даже пытался поместить константу только в StringFormat (StringFormat = "hi"), но он проигнорировал ее и привязал напрямую к AddressLine2. вот моя разметка

<TextBlock.Text>  
   <MultiBinding StringFormat="{}{0} &#x0a;{1}&#x0a;{2} {3}, {4} {5}">  
     <Binding Path="FullName" />  
     <Binding Path="AddressLine1" />  
     <Binding Path="AddressLine2" StringFormat="{}{0}&#x0a;" />  
     <Binding Path="City" />  
     <Binding Path="State" />  
     <Binding Path="ZipCode" />  
  </MultiBinding>  
</TextBlock.Text>  

мой вопрос: почему он игнорирует внутренний StringFormat (я пробовал все разные комбинации; "'{0}&#x0a;'", "'{}{0}&#x0a;'", " {0}&#x0a;", ни одна не работала)? Кроме того, есть ли лучший способ сделать это (в XAML я не хочу конвертер или какой-либо код позади)?

1 Ответ

2 голосов
/ 11 августа 2010

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

Поскольку вы используете его значение, ине отображая его в мультибиндинге, он будет использовать значение в MultiBinding StringFormat.

Короче говоря: StringFormat для Bindings в MultiBindings будет игнорироваться, так сказать.MultiBinding, свойство StringFormat применяется только тогда, когда оно установлено в MultiBinding.Значение StringFormat, установленное для любых дочерних объектов Binding, игнорируется.Число параметров в формате составной строки не может превышать число дочерних объектов Binding в MultiBinding.

Обходной путь: разверните MultiBinding StringFormat:

StringFormat="{}{0} &#x0a;{1}&#x0a;{2}&#x0a;{3}, {4} {5}"

Но я полагаюмог бы понять это тоже;)

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