2014-08-06 3 views
0

Я пытаюсь многосвязывать строку с форматируемой строкой из моих локализованных ресурсов в TextBlock.Многопользовательские строковые ресурсы с StringFormat

Строка выглядит следующим образом: This record is locked for edit by {0}.

Теперь я хочу, чтобы связать, что к TextBlock:

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding StringFormat="{}{0}"> 
      <Binding Source="{x:Static res:LocalizedResources.EntityLockedMessageTitleFormat}" /> 
      <Binding Path="Entity.LockedBy" /> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

Но, к сожалению, это только показывает фактическую строку (содержащую {0}).

Как я могу связать это много? Наиболее желательно без использования конвертеров (только в XAML).

ответ

1

Просто подумайте о начальном {}, являющемся началом StringFormat. Затем каждое значение Binding можно получить, используя следующий последовательный индекс. Попробуйте это:

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding StringFormat="{}{0} {1}."> 
      <Binding Source="{x:Static res:LocalizedResources.EntityLockedMessageTitleFormat}" /> 
      <Binding Path="Entity.LockedBy" /> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

Когда спутать о классе или функции .NET, то, как правило, лучше идти в MSDN, где можно нормально найти подробное объяснение и пример кода. Дополнительную информацию об использовании MultiBinding см. На странице MultiBinding Class в MSDN.


UPDATE >>>

Вы не можете использовать string как Entity {0} is locked by {1} since {2}. как формат string в XAML. Вместо этого, что вы может сделать, это отформатировать код string в коде и выставить результат как свойство, к которому вы можете привязать данные в пользовательском интерфейсе. Попробуйте что-то вроде этого:

public string FormattedString 
{ 
    get { return string.Format(YourEntityLockedMessageTitleFormat, Val1, Val2, Val3); } 
} 
+0

Спасибо за ваш ответ, но, к сожалению, это приводит к следующему выходу (John Doe, являющийся Entity.LockedBy): 'Эта запись заблокирована для редактирования с помощью {0}. John Doe' – SeToY

+0

Итак, теперь я понимаю, что вы имеете в виду значение 'EntityLockedMessageTitleFormat' ... вы не можете использовать его так. Это значение * должно быть *: «Эта запись заблокирована для редактирования« * »без *« {0} .' ». – Sheridan

+0

Итак, при добавлении второго параметра, например даты, это все еще непригодно? Например, я не могу добавить следующую строку в мои ресурсы? 'Entity {0} заблокирован {1}, так как {2}'. Это не позволило бы мне конкатенировать (а также быть уродливым для других языков)? – SeToY

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

  • Нет связанных вопросов^_^