#c# #.net #wpf
#c# #.net #wpf
Вопрос:
У меня в моем xaml есть следующая привязка, я вижу отображаемое двойное значение, однако StringFormat
оно полностью игнорируется.
<Label Content="{Binding ByteCount, StringFormat=n}"/>
ByteCount
свойство имеет тип double . Я даже изменил его даже на string, и он все равно не работает.
В чем может быть причина, пожалуйста?
Обновить:
public double ByteCount
{
get
{
return CloneHelper.GetSize(this);
}
}
public static class CloneHelper
{
public static double GetSize(BookSetViewModel book)
{
.....
return total;
}
}
Комментарии:
1. Возможно, вы можете включить фактическую привязку в свой вопрос? (кстати: свойство ByteCount представлено как double!?)
2. Если
ByteCount
это anint
, возможно, вам не хватает конвертера.3. попробуйте
Mode=TwoWay
сначала удалить, не вижу в этом никакого смысла с помощью Label4. Сообщает ли окно вывода в Visual Studio о каких-либо сбоях BindingExpression?
5. Я добавил запрошенную привязку. Большое спасибо
Ответ №1:
Label
На самом деле у WPF ContentStringFormat
есть свойство, которое перезаписывает все StringFormat
, что связано с привязкой
Установить ContentStringFormat
вместо
<Label Content="{Binding ByteCount}" ContentStringFormat="n" />
Комментарии:
1. Ты звезда, Рейчел. Удивительно найдено, это было оно !!! 🙂 Это то же самое для silverlight? Мне нужно это проверить…
2. @Kave Я не уверен, что это то же самое для Silverlight, но я бы предположил, что это так. Должно быть легко написать быстрый тест и выяснить.
Ответ №2:
StringFormat
Свойство имеет специфический синтаксис, который вы должны использовать.
Для вашего примера вы должны использовать этот фрагмент.
<Label Content="{Binding ByteCount, StringFormat={}{0:n}}" />
Вот ссылка на страницу MSDN для свойства StringFormat .
Комментарии:
1. Он отлично работает без {} просто для того, чтобы избежать фигурных скобок. «StringFormat= n» должен работать (и работает здесь) тоже.
2. Ага. Спасибо — я этого не знал.
3. Я думаю, вы пропустили } в конце перед «. Тем не менее, это тоже не работает. Я не понимаю…
Ответ №3:
Понятия не имею, в чем причина, возможно, из-за целевого типа (для label это object), но для текстового блока он работает нормально:
<TextBlock Text="{Binding ByteCount, StringFormat=n}"/>