Viewmodelプロパティがある場合
public (string Mdf, string MdfPath) MachineDefinition { get; set; }
xAML/WPFでそれにバインドしようとしています
<Label Content="{Binding Path=MachineDefinition.Item2}" />
または
<Label Content="{Binding Path=MachineDefinition.MdfPath}" />
同じエラーが出ます
ValueTupleフィールドは実際にはfieldsではなくpropertiesであることがわかりました。これは問題ですか?
混乱は、古いスタイルのタプル(C#7以前)のすべてのアイテムがプロパティだったことです。
https://msdn.Microsoft.com/en-us/library/dd386940(v = vs.110).aspx
したがって、バインド可能です。 ValueTupleの場合、これらはフィールドです
バインドできません。
グーグル "WPFタプルバインディング"を実行すると、古いスタイルのタプルはバインド可能ですが、新しいタプルはバインドできないため、多くの誤検知が発生します。
あなたが試すことができるものは、値コンバーターを実装することです。ここに例があります...
public class TupleDisplayNameConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var Tuple = value as (Int32 Id, String Name)?;
if (Tuple == null)
return null;
return Tuple.Value.Name;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
<TextBlock Text="{Binding Converter={StaticResource TupleDisplayNameConverter}, Mode=OneWay}" />
お役に立てれば。
名前の部分はveryなので、実際に存在する場所に関して制限があるため、MdfPath
アプローチは機能しません。本質的に、それは純粋なコンパイラブードゥーであり、型モデルには存在しません。つまり、型モデル(リフレクション、UIツール、シリアライザなど)と通信するものはすべてonlyを参照Item1
、Item2
名前;偽の名前ではありません。