2016-12-09 5 views
1

XAML(特にUniversal Windowsプラットフォーム)では、インデクサのプロパティパス表記を使用して、インデックス付きプロパティにデータをバインドできます。標準のプロパティと同じプロパティパス構文を使用してxamlのインデックス付きプロパティにバインドすることはできますか?

次のように私はインデックス付きプロパティにバインドすることができますタイプDictionary<string,string>のデータソースを考える:上記で

<TextBlock Text="{Binding Dictionary[Property]}"/> 

を、TextBlockののDataContextのが辞書プロパティを持つオブジェクトに設定され、次のように言う:

public class DataObject 
{ 
    public Dictionary<string,string> Dictionary { get; } = new Dictionary<string,string> {["Property"]="Value"}; 
} 

私の質問は、インデクサ表記を使わずにインデックス付きプロパティにバインドできますが、代わりに標準プロパティバインディングの構文を使用できますか?私の最初のテストから

すなわち

<TextBlock Text="{Binding Dictionary.Property}"/> 

これは動作するようには思えません。それを動作させる簡単な方法はありますか?私はインデックス付きのプロパティ(この場合はDictionaryのようなものですが、単純なオブジェクトでもよい)を持つデータソースオブジェクトを使いたいと思います。私は動的なオブジェクトを使いたくない。

+0

もっとコードが役立ちます。 'Dictionary'プロパティはどのように定義されていますか、' Property'とは何ですか? 'DataContext'はどのように設定されていますか? –

+0

申し訳ありませんが、上記の名前はプレースホルダーを意図しています。したがって、上記のバインディングでは、DataContextは "Dictionary"という名前のDictionary 型のプロパティを含むオブジェクトになります。 "プロパティ"は、その辞書のインデックスキーです。 – stuart

+0

実際の完全なコードを投稿すると、助けを得るチャンスが大幅に向上します。 :-) –

答えて

0

文法はありませんが、私は恐れています。標準プロパティのための作品を結合標準プロパティの構文、例えば、

<TextBlock Text="{Binding Dictionary.Count}" /> 

は...辞書(または任意のオブジェクト)のCountプロパティにバインドします。あなたが本当にカッコを嫌う場合は、私が見つけることができる最も近いものは、パラメータでコンバータを使用することであろう彼らに括弧を必要とする...

EDIT

。たとえば、次のように

public class MyConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     IDictionary<string, string> dictionary = value as IDictionary<string, string>; 
     string dictionaryValue; 
     if (dictionary != null && dictionary.TryGetValue(parameter as string, out dictionaryValue)) 
     { 
      return dictionaryValue; 
     } 

     return value; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     throw new NotSupportedException(); 
    } 
} 

XAML:

<Page 
    x:Class="UWP.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:uwp="using:UWP"> 

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
     <Grid.Resources> 
      <uwp:MyConverter x:Key="MyConverter" /> 
     </Grid.Resources> 
     <Grid.DataContext> 
      <uwp:DataObject /> 
     </Grid.DataContext> 
     <TextBlock 
      Text="{Binding Dictionary, ConverterParameter=Property1, Converter={StaticResource MyConverter}}" /> 
    </Grid> 
</Page> 

...ブラケットよりも読むのが大変なもので終わるの回り道です。

+0

よろしくお願いします。同じ構文を使用してインデクサープロパティと標準プロパティにバインドできるのは意味がありません。両方のプロパティ名が同じである可能性があるからです。辞書を何らかの方法でマークして、動的プロパティを持つオブジェクトのように使用できるようにすることは、素晴らしいことです。標準プロパティの構文は簡単です。私は開発者のプラットフォームに取り組んでいるので、これが重要になった。 Xamarin.Formsに実装されているデータバインディングシステムをハックして、この作業を行うことができるかどうかを確認することができます。 – stuart

+0

ええ、はい。私はチェックアウトする考えがあります。私はあなたに戻ってきます。 –

+1

私は別の方法で自分の答えを更新しました - それは括弧の改善ではないと思います。 しかし、これが何らかの形で役に立つ場合は、その答えを受け入れてください。 –

関連する問題