Нашел ваш вопрос после поиска ответа самостоятельно; нигде не нашел много помощи, но понял это после проб и ошибок.
Параметр функции "поставщик" недействителен или не соответствует
Причина этого в том, что в XAML вызывается конкретная перегрузка DateTimeProperty.ToString(string, IFormatProvider).
В моем случае любое значение, которое я отображаю, находится в пользовательском элементе управления, поэтому для каждого я добавил свойство зависимости CultureInfo и привязал его к общему источнику в моей модели представления.
Если С#, добавьте:
using System.Globalization;
затем
public static readonly DependencyProperty CultureInfoProperty = DependencyProperty.Register(
"CultureInfo", typeof(CultureInfo), typeof(XyzReadoutView), new PropertyMetadata(default(CultureInfo)));
public CultureInfo CultureInfo
{
get { return (CultureInfo) GetValue(CultureInfoProperty); }
set { SetValue(CultureInfoProperty, value); }
}
Это создает локальный экземпляр, необходимый для x:Bind, ошибки компиляции возникают при использовании статического свойства.
И XAML:
<TextBlock Text={x:Bind MyDateTime.ToString('h:mm tt', CultureInfo)} />
Обратите внимание, что формат окружен ', а не ".
Кроме того, это будет обновляться только один раз, так как режим для x: Bind по умолчанию имеет значение Mode=OneTime; если вы хотите, чтобы изменения в DateTime или CultureInfo распространялись, режим необходимо изменить на Mode=OneWay.
<TextBlock Text={x:Bind MyDateTime.ToString('h:mm tt', CultureInfo), Mode=OneWay} />
Если формат может изменяться пользователем, я бы также создал для него свойство зависимости для обновлений и простой привязки управления к модели представления, но это только мои личные предпочтения.
public static readonly DependencyProperty DateTimeFormatProperty = DependencyProperty.Register(
"DateTimeFormat", typeof(string), typeof(XyzReadoutView), new PropertyMetadata(default(string)));
public string DateTimeFormat
{
get { return (string) GetValue(DateTimeFormatProperty); }
set { SetValue(DateTimeFormatProperty, value); }
}
И XAML:
<TextBlock Text={x:Bind MyDateTime.ToString(DateTimeFormat, CultureInfo), Mode=OneWay} />
person
Joel Janssen
schedule
16.01.2018