私はUWPプロジェクトとWPFプロジェクトを持っています。どちらのプロジェクトも同じコンバータが必要です。しかし、Interface IValueConverter
はWPFのように別の名前空間のUWPにあります。さらに、最後のパラメータは同じではありません(WPFではUWPのCultureInfoです)。 両方のプロジェクトのコンバータを作成するベストプラクティスは何ですか?WPFおよびUWPプロジェクトでIValueConverterを使用する場合のベストプラクティス
私のソリューション私は、WPF IValueConverterとUalpからのIValueConverterの2つのメソッドをそれぞれ定義するValueConverterBaseクラスを持つnetstandardプロジェクトを持っています。今、私はロジックを行いnetstandardプロジェクトでコンバータを作成することができます
public abstract class ValueConverterBase
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return this.OnConvert(value, targetType, parameter, language);
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return this.OnConvertBack(value, targetType, parameter, language);
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return this.OnConvert(value, targetType, parameter, culture.TwoLetterISOLanguageName);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return this.OnConvertBack(value, targetType, parameter, culture.TwoLetterISOLanguageName);
}
public abstract object OnConvert(object value, Type targetType, object parameter, string language);
public abstract object OnConvertBack(object value, Type targetType, object parameter, string language);
}
:それはまたsepcificコンバータを実装している2つの抽象メソッドを定義します。 UWPでこのコンバータを使用することが可能とWPFは、各プロジェクトには、コンバータと、特定のIValueConverterから派生クラスを作成する必要がありますするには、次の
public class WpfConverter : CommonConverter, IValueConverter
{
}
public class UwpConverter : CommonConverter, IValueConverter
{
}
私は各コンバータのための3つの新しいクラスを追加する必要があり、この解決策の問題。また、すべての開発者はこの回避策について知っておく必要があります。 別のポイントは、コンバータでWPFまたはUWP固有のロジックを使用できないことです。誰かに別の解決策がありますか?
新しいソリューションは、私が@Anton Tykhyyと@Heinziからの答えと私の最初のソリューションを組み合わせます。私はプリプロセッサと共有ソースではなく、アセンブリを使用したい
public abstract class ValueConverterBase
#if UWP
: Windows.UI.Xaml.Data.IValueConverter
#endif
#if WPF
: System.Windows.Data.IValueConverter
#endif
{ ...
はい、それです。私は、Visual Studio 2015+が[共有プロジェクト](http://dailydotnettips.com/2015/07/28/using-shared-project-across-multiple-applications-in-visual-studio-2015/)をサポートしていると付け加えます。つまり、異なるプロジェクト構成は必要ありません。 netstandardプロジェクトを、WPFプロジェクトとUWPプロジェクトの両方で参照される「共有プロジェクト」に置き換えるだけです。 – Heinzi