2012-09-19 23 views
5

Wygląda na to, że nie jest dostępna TypeConverter. Co jest zalecane, aby to zastąpić?Wymiana WinRT dla System.ComponentModel.TypeConverter

Miałem zamiar utworzyć własną klasę TypeConverter, której użyję, aby ją zastąpić, ale jeśli jest w tym WinRT nowy lub lepszy sposób, zrobię to. Jest też wiele innych klas, które musiałbym odtworzyć; jak wszystkie domyślne konwertery typów.

+0

'TypeConverter' jest w rzeczywistości dość złożonym API, szczególnie jeśli weźmie się pod uwagę całą instalację hydrauliczną; W przypadku winrt, tak: jest to dość minimalne - więc: aby odpowiedzieć na Twoje pytanie, musimy wiedzieć, jaki zestaw scenariuszy potrzebujesz wspierać. –

+0

Konwertowanie ciągu znaków na dowolny typ wbudowany i powrót do ciągu znaków. W tym miejscu wejdą do gry wszystkie wbudowane konwertery, takie jak 'StringConverter'. Używam również 'TypeDescriptor.GetConverter' i wszelkich innych klas używanych wokół nich. Mogę zaimplementować tylko te funkcje, których potrzebuję, tworząc zestaw klas "MissingFromRt45", ale wygląda na to, że lista klas będzie dość duża. –

+0

Czy uważasz, że byłoby bardziej korzystne wyciągnięcie wszystkich rzeczy, których używam typu TypeConverter i zmiana ich na niestandardową konfigurację konwersji typu? W ten sposób zadziała niezależnie od wersji .NET, na której działa. –

Odpowiedz

2

W WinRT nie ma klasy TypeConverter, a zespół nie ogłosił żadnych planów włączenia jej w przyszłym wydaniu. Masz wiele opcji.

Opcja 1: Jeśli konwersja ma być wykonane jako część wiązania wykorzystania przesyłania danych przez interfejsIValueConverter jak Dennis wymienione.

Opcja 2: Jeśli jesteś twórcą typu można dodawać własne operatorów jawnych lub ukrytych wspieranie rzucania:

http://msdn.microsoft.com/en-US/library/xhbhezf4(v=vs.80).aspx

http://msdn.microsoft.com/en-US/library/z5z9kes2(v=vs.80).aspx

Wariant 3: You mógł utworzyć własną klasę TypeConverter.

Wariant 4: (Droga zrobiłbym to gdyby nie część wiążąca) Można dodać własne metody rozszerzenia:

static public class ConverterExtensions 
{ 
    static public string ToFixedString(this double value) 
    { 
     return value.ToString("D"); 
    } 
} 

Które pozwalają pisać kod tak:

double d = 123.45; 
string str = d.ToFixedString(); // str now equals "123" 
+1

Jeśli celem jest zastąpienie tylko użycia TypeConvertera w deklaracjach XAML, która z tych opcji jest preferowana? Próbowałem # 1 bez powodzenia, a # 4 jest na zewnątrz. –

+0

Byłbym bardzo zainteresowany tym, w jaki sposób zaimplementowano opcję 3. Nie mogę znaleźć żadnego przykładu typeconverter w uwp. Istnieje również uservoice https://wpdev.uservoice.com/forums/110705-universal-windows-platform/suggestions/9576897-implement-system-componentmodel-typeconverter-in-w – Briefkasten

+0

Wraz z aktualizacją twórców typekonwertery nadchodzą! http: // timheuer.com/blog/archive/2017/02/15/implement-type-converter-uwp-winrt-windows-10-xaml.aspx – Briefkasten

0

Użyj interfejsu IValueConverter.

+0

Czy są jakieś wbudowane konwertery, które implementują ten interfejs? –

+0

WinRT jest bardziej Silverlight, niż WPF. Tak więc, nie sądzę, że istnieją jakieś gotowe konwertery. – Dennis