X: Bindni ishlatganda imzo ko'rsating

UWP sizga statik usulni ulash imkonini beradi. Men foydalanib, vaqtni yozishga harakat qilaman


bu erda MyPatternString "h: mm tt" dir.

Muammo shundaki DateTime ning ToString() usulida bir nechta turli imzo mavjud. Birinchisi IFormatProvider ni oladi. Shuning uchun, men qurish xatosi olaman:

"Provayder" funksiyasi parametri noto'g'ri yoki javobsiz

Bir mag'lubiyatni qabul qiladigan imzolardan foydalanishni xohlayotganimni aytishning biron bir usuli bormi? Men buni avtomatik ravishda bilib olaman deb o'ylardim.

1
Faqat IFormatProvider (CultureInfo.Invariant yoki shunga o'xshash) qo'sha olmaysizmi? Aks holda, qo'ng'iroq qilish uchun o'zingizning konvertatsiya usulini yarating.
qo'shib qo'ydi muallif Henk Holterman, manba
Faqat IFormatProvider (CultureInfo.Invariant yoki shunga o'xshash) qo'sha olmaysizmi? Aks holda, qo'ng'iroq qilish uchun o'zingizning konvertatsiya usulini yarating.
qo'shib qo'ydi muallif Henk Holterman, manba

8 javoblar

Siz faqat ViewModel usulini qo'shishingiz va buning o'rniga foydalanishingiz mumkin!

Shunday qilib, sizning majburiy ifodangizni quyidagicha o'zgartirish mumkin:


Buning uchun Windows 10 yilligi yangilanishi bilan ishlashni tavsiya eting! Bu masala bo'yicha batafsil ma'lumot bu erda !

2
qo'shib qo'ydi
Hm. Ko'rinishimga qaraganda, bu eng yaqin. Buni qilish kerak, lekin bu hech narsadan yaxshiroqdir.
qo'shib qo'ydi muallif RareNCool, manba

Siz faqat ViewModel usulini qo'shishingiz va buning o'rniga foydalanishingiz mumkin!

Shunday qilib, sizning majburiy ifodangizni quyidagicha o'zgartirish mumkin:


Buning uchun Windows 10 yilligi yangilanishi bilan ishlashni tavsiya eting! Bu masala bo'yicha batafsil ma'lumot bu erda !

2
qo'shib qo'ydi
Hm. Ko'rinishimga qaraganda, bu eng yaqin. Buni qilish kerak, lekin bu hech narsadan yaxshiroqdir.
qo'shib qo'ydi muallif RareNCool, manba

Siz faqat ViewModel usulini qo'shishingiz va buning o'rniga foydalanishingiz mumkin!

Shunday qilib, sizning majburiy ifodangizni quyidagicha o'zgartirish mumkin:


Buning uchun Windows 10 yilligi yangilanishi bilan ishlashni tavsiya eting! Bu masala bo'yicha batafsil ma'lumot bu erda !

2
qo'shib qo'ydi
Hm. Ko'rinishimga qaraganda, bu eng yaqin. Buni qilish kerak, lekin bu hech narsadan yaxshiroqdir.
qo'shib qo'ydi muallif RareNCool, manba

Ko'rsatiladigan matnni formatlashtirish uchun siz IValueConverterdan foydalanishingiz kerak. IValueConverter'dan egallagan sinf yarating.

public class DateFormatter : IValueConverter
{
   //This converts the DateTime object to the string to display.
    public object Convert(object value, Type targetType, 
        object parameter, string language)
    {
       //Retrieve the format string and use it to format the value.
        string formatString = parameter as string;
        if (!string.IsNullOrEmpty(formatString))
        {
            return string.Format(
                new CultureInfo(language), formatString, value);
        }
       //If the format string is null or empty, simply call ToString()
       //on the value.
        return value.ToString();
    }

   //No need to implement converting back on a one-way binding 
    public object ConvertBack(object value, Type targetType, 
        object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

Uni sahifadagi manba sifatida ro'yxatdan o'tkazing va keyin konvertorni ulashda tanlashingiz mumkin


https://docs.microsoft.com/ en-us/uwp/api/Windows.UI.Xaml.Data.IValueConverter

1
qo'shib qo'ydi
Konvertorlardan qochish x: Bindning maqsadlaridan biridir.
qo'shib qo'ydi muallif Henk Holterman, manba
Men ishlashni istagan narsani amalga oshirish uchun konvertsiyadan qanday foydalanishni bilaman. Mening savolim ko'proq qiziqish-savoldir. Imzolarni ko'rsatishning bir yo'li bo'lishi kerak.
qo'shib qo'ydi muallif RareNCool, manba

Ko'rsatiladigan matnni formatlashtirish uchun siz IValueConverterdan foydalanishingiz kerak. IValueConverter'dan egallagan sinf yarating.

public class DateFormatter : IValueConverter
{
   //This converts the DateTime object to the string to display.
    public object Convert(object value, Type targetType, 
        object parameter, string language)
    {
       //Retrieve the format string and use it to format the value.
        string formatString = parameter as string;
        if (!string.IsNullOrEmpty(formatString))
        {
            return string.Format(
                new CultureInfo(language), formatString, value);
        }
       //If the format string is null or empty, simply call ToString()
       //on the value.
        return value.ToString();
    }

   //No need to implement converting back on a one-way binding 
    public object ConvertBack(object value, Type targetType, 
        object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

Uni sahifadagi manba sifatida ro'yxatdan o'tkazing va keyin konvertorni ulashda tanlashingiz mumkin


https://docs.microsoft.com/ en-us/uwp/api/Windows.UI.Xaml.Data.IValueConverter

1
qo'shib qo'ydi
Konvertorlardan qochish x: Bindning maqsadlaridan biridir.
qo'shib qo'ydi muallif Henk Holterman, manba
Men ishlashni istagan narsani amalga oshirish uchun konvertsiyadan qanday foydalanishni bilaman. Mening savolim ko'proq qiziqish-savoldir. Imzolarni ko'rsatishning bir yo'li bo'lishi kerak.
qo'shib qo'ydi muallif RareNCool, manba

Ko'rsatiladigan matnni formatlashtirish uchun siz IValueConverterdan foydalanishingiz kerak. IValueConverter'dan egallagan sinf yarating.

public class DateFormatter : IValueConverter
{
   //This converts the DateTime object to the string to display.
    public object Convert(object value, Type targetType, 
        object parameter, string language)
    {
       //Retrieve the format string and use it to format the value.
        string formatString = parameter as string;
        if (!string.IsNullOrEmpty(formatString))
        {
            return string.Format(
                new CultureInfo(language), formatString, value);
        }
       //If the format string is null or empty, simply call ToString()
       //on the value.
        return value.ToString();
    }

   //No need to implement converting back on a one-way binding 
    public object ConvertBack(object value, Type targetType, 
        object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

Uni sahifadagi manba sifatida ro'yxatdan o'tkazing va keyin konvertorni ulashda tanlashingiz mumkin


https://docs.microsoft.com/ en-us/uwp/api/Windows.UI.Xaml.Data.IValueConverter

1
qo'shib qo'ydi
Konvertorlardan qochish x: Bindning maqsadlaridan biridir.
qo'shib qo'ydi muallif Henk Holterman, manba
Men ishlashni istagan narsani amalga oshirish uchun konvertsiyadan qanday foydalanishni bilaman. Mening savolim ko'proq qiziqish-savoldir. Imzolarni ko'rsatishning bir yo'li bo'lishi kerak.
qo'shib qo'ydi muallif RareNCool, manba

Ko'rsatiladigan matnni formatlashtirish uchun siz IValueConverterdan foydalanishingiz kerak. IValueConverter'dan egallagan sinf yarating.

public class DateFormatter : IValueConverter
{
   //This converts the DateTime object to the string to display.
    public object Convert(object value, Type targetType, 
        object parameter, string language)
    {
       //Retrieve the format string and use it to format the value.
        string formatString = parameter as string;
        if (!string.IsNullOrEmpty(formatString))
        {
            return string.Format(
                new CultureInfo(language), formatString, value);
        }
       //If the format string is null or empty, simply call ToString()
       //on the value.
        return value.ToString();
    }

   //No need to implement converting back on a one-way binding 
    public object ConvertBack(object value, Type targetType, 
        object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

Uni sahifadagi manba sifatida ro'yxatdan o'tkazing va keyin konvertorni ulashda tanlashingiz mumkin


https://docs.microsoft.com/ en-us/uwp/api/Windows.UI.Xaml.Data.IValueConverter

1
qo'shib qo'ydi
Konvertorlardan qochish x: Bindning maqsadlaridan biridir.
qo'shib qo'ydi muallif Henk Holterman, manba
Men ishlashni istagan narsani amalga oshirish uchun konvertsiyadan qanday foydalanishni bilaman. Mening savolim ko'proq qiziqish-savoldir. Imzolarni ko'rsatishning bir yo'li bo'lishi kerak.
qo'shib qo'ydi muallif RareNCool, manba

Javobni o'zim topsam, o'zingizning savolingizni topdingiz; har qanday joyda chop etilgan juda ko'p yordam topa olmagan, ammo ba'zi bir sinov va xatolardan keyin uni tushunishgan.

"Provayder" funksiyasi parametri noto'g'ri yoki mos kelmagan

Buning sababi, XAML da, ma'lum bir haddan tashqari yuk chaqiruvi bo'lgan DateTimeProperty.ToString (string, IFormatProvider).

Menimcha, men ko'rsatadigan har qanday qiymat foydalanuvchi tekshiruvi ichidadir, shuning uchun har bir kishi uchun CultureInfo bog'liqlik xususiyatini qo'shib qo'ydim va uni ko'rish modelimdagi umumiy manbaga bog'ladim.

C # bo'lsa, qo'shing:

using System.Globalization;

Keyin

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); }
    }

Bu x: Bind uchun zarur bo'lgan mahalliy bir misol hosil qiladi, statik xususiyat ishlatilayotgan bo'lsa, kompilyatsiya xatolar paydo bo'ladi.

XAML:


Formatning "va emas" bilan o'rab olinganligiga e'tibor bering.

Bundan tashqari, bu faqat bir marta yangilanish rejimi sifatida yangilanadi: Bindning Mode = OneTime sukuti mavjud; Agar siz DateTime yoki CultureInfo-da tarqaladigan o'zgarishlarni xohlasangiz, tartibni Mode = OneWayga almashtirish kerak.


Agar format foydalanuvchi o'zgarishi mumkin bo'lsa, men uchun yangilanishlar va oson nazorat qilish uchun qarash xususiyatini yarataman, lekin bu men uchun shaxsiy afzaldir.

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:


0
qo'shib qo'ydi