StringFormat, похоже, не реагирует

#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 это an int , возможно, вам не хватает конвертера.

3. попробуйте Mode=TwoWay сначала удалить, не вижу в этом никакого смысла с помощью Label

4. Сообщает ли окно вывода в 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}"/>