2010-08-11 2 views
2

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

<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, я не хочу, чтобы конвертер или какой-либо код позади)?

ответ

2

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

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

Вкратце: StringFormat on Bindings in MultiBindings будет игнорироваться, так сказать.

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

Временное решение: расширить MultiBinding StringFormat:

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

Но я думаю, вы могли бы понять, что один из так;)

+0

Спасибо. Я на самом деле просто понял, что я пробовал, было глупо, даже если бы это сработало, я бы не получил результаты, которые я искал. У вас есть идея, как перейти к условному введению новой строки? – Fragilerus

+0

Без проблем! Вы можете использовать конвертер или все решения Xaml: использовать DataTemplate, стилизовать его и добавить триггеры, чтобы скрыть строки, поместить их в ContentControl и позволить свойству Content связываться с вашим DataContext. – Arcturus

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