StringFormat
игнорируется, если цель связывания не классифицирован как String
. Поэтому будет использоваться StringFormat
на MultiBinding
, поскольку TextBlock.Text
- String
(он не работает, если вы были привязаны к Label.Content
, потому что Label.Content
- Object
- общая жалоба). Внутренний, привязка к .[InstanceName]
, не имеет цели, которая набирается как String
, потому что MultiBindings
должен принимать значения любого типа. Так что StringFormat
игнорируется.
Следующие работы.
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}\{1}">
<Binding Path=".[ServerName]" TargetNullValue=""/>
<Binding Path=".[InstanceName]" TargetNullValue="" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Если вы сделали это ваш путь, чтобы исключить обратную косую черту в тех случаях, когда .[InstanceName]
имеет нулевое значение, у вас есть проблемы. Я бы написал многозначный конвертер, чтобы вставить обратную косую черту, или нет, и пропустите StringFormat
. Невозможно получить StringFormat
, чтобы сделать то, что вам нужно, чтобы сделать здесь. Это просто недостаточно умен.
C#
public class ServerInstance : MarkupExtension, IMultiValueConverter
{
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
public object Convert(object[] values, Type targetType,
object parameter, CultureInfo culture)
{
var server = $"{values[0]}0";
var instance = $"{values[1]}";
if (instance == "")
return server;
if (server == "")
return "";
return $"{server}\\{instance}";
}
public object[] ConvertBack(object value, Type[] targetTypes,
object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
XAML
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{local:ServerInstance}">
<Binding Path=".[ServerName]" />
<Binding Path=".[InstanceName]" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Спасибо. Точная причина, по которой я это делал, - исключить обратную косую черту. Я просто хотел избежать конвертеров. –
@ EhsanKeshavarzian Я согласен, всегда лучше держать его в чистом XAML, но я не думаю, что это вариант на этом. –