2016-07-07 6 views
-2

この質問は昨日尋ねられた答えが見つからないthis questionに関連しています。 XAMLでタイプ間のキャストが可能かどうかは疑問です。私は[この回答] [2]を見つけましたが、私はその構文を働かせることができませんでした。私はそのプロパティのいくつかにアクセスするための型にダウンキャストできるようにしたいと思います。私はXAMLのみのメソッドを好むでしょうが、もしC#を使う必要があれば、私もそれを行うことができます。どんな助けもありがとうございます。ありがとうXAMLの型間でのキャスト

編集:

私の質問を明確にするためにいくつかのコードを追加します。

私の問題は、サブクラスのユニットタイプのいずれかに固有のプロパティにバインドしようとすると、XAMLはそれを見ず、ちょうど0を返します。通常、これがC#で行われている場合は、キャストしてプロパティにアクセスするだけですが、コードのこの時点ではこれを行うことはできません。バインディングはC#で次のように作成されています。

dgtc.Header = Properties.Resources.MaxPressure; 
dgtc.MinWidth = 25; 
dgtc.Width = Properties.Settings.Default.MaxPressureColumnWidth; 
dgtc.IsReadOnly = true; 
dgtc.Binding = new Binding("Unit.MaxDepthRelativeToEntry") 
{ 
    Converter = new DistanceUnitsConverter() 
}; 

ここでdgtcはDataGridTextColumnです。 Unit.MaxDepthRelativeToEntryはAUnitのサブクラスのプロパティであるため0になります。そのため、XAMLは存在しないプロパティにアクセスしようとしていると考えます。第2のリンクから

は、これまでのところ、私は次の構文のいくつか試してみました:

dgtc.Binding = new Binding("AUnit.MaxDepthRelativeToEntry") 
dgtc.Binding = new Binding("Unit(MyNameSpace:AUnit).MaxDepthRelativeToEntry") 
dgtc.Binding = new Binding("Unit(MyNameSpace:AUnit.MaxDepthRelativeToEntry)") 

をし、仕事にそれらのいずれかを取得することができませんでした。私はまた、コンバータを介してこれをやってみましたが、問題は、私はDataGridを構築している/私はバインディングの設定など、私に利用可能なユニットのリストを持っていない/ etc。私はインスタンスからプロパティを取得し、それを返すことができません。誰かが、私ができればXAMLで、私がバインディングしているタイプのサブクラスタイプのプロパティにアクセスできるということを知っていますか?

+0

はの[、最小完全、かつ検証](http://stackoverflow.com/help/mcve)の例を作成します。あなたが試したものと失敗したもの –

+0

xamlでキャストすることはできないと思っています。マークアップだけなので、キャストが有効であればキャストは問題ありません。 – adminSoftDK

答えて

0

Eliが指摘しているように、サンプルコードなしで達成しようとしていることを正確に伝えるのは難しいです。ただし、単純なソリューションは、コンバータを使用してバインディングを使用するだけの可能性があります。ここでは、特定の型にキャストしようとコンバータの(未テスト)の例です:

public class CastAsMyTypeConverter: IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var myTypeObject = value as MyType; 
     return myTypeObject ?? Binding.DoNothing; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
}