2012-02-07 15 views
1

私は、文字列をテキストブロックまたはデータトリガー(基本的にはいくつかのWPFオブジェクト)にバインドし、その文字列の一部を取ります。この文字列は区切られます。ですから、例えば、私はこの文字列を持っている:部分文字列のバインドされた文字列

String values = "value1|value2"; 

をそして、私は2つのコントロールがある - txtBlock1txtBlock2を。

txtBlock1では、Text={Binding values}のようなTextプロパティを設定したいと思います。 txtBlock2では、TextプロパティをText={Binding values}のように設定したいと思います。

明らかに、これは同じ文字列を表示するので、このバインディングに部分文字列値を追加するために、ある種類のStringFormat式が必要です。txtBlock1はvalue1を、txtBlock2はvalue2を読み取ります。

私はよく読んだことがありました。これは次のようです:Wpf Binding Stringformat to show only first characterが典型的な提案された解決策です。しかし、私がここで達成しようとしていることはひどく長引いているようです。

ご協力いただきありがとうございます。

答えて

1

ここで必要なのはコンバータです。 インデックスを示すコンバータパラメータを追加します。

public class DelimiterConverter : IValueConverter 
{ 
    public object Convert(Object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     string[] values = ((string)value).Split("|"); 
     int index = int.Parse((string)parameter); 
     return values[index]; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return ""; 
    } 

次に、ConverterParameter属性を使用してXAMLの値のインデックスを指定するだけです。

1

リンク先の例で説明したように、値コンバータを使用します。

しかし、あなたは、より簡単です何かをしたい場合は、次のプロパティとバインディングを使用できます。

public string[] ValueArray 
{ 
    get 
    { 
     return values.Split('|'); 
    } 
} 

<TextBlock Text="{Binding ValueArray[0]}" /> 
<TextBlock Text="{Binding ValueArray[1]}" /> 

しかしvaluesはどちらかであるnullまたは|が含まれていない場合に発生することができるものの世話をします。

1

あなたはちょうどあなたが簡単に行うことができます2つの文字列がある場合:実際には

<TextBlock Text=Text={Binding value1}/> 
<TextBlock Text=Text={Binding value2}/> 

public string value1 
{ 
    get{return values.Split('|')[0]} 
    set{values = value + values.Remove(0, values.IndexOf('|')+1)} 
} 
public string value2 .... 
public string values ... 

を、あなたは(アプローチ上に延びる)set valueおよび関連指標のためget valueための関数を書くことができ、しかし、この構文が気に入らなければ、あなたが紹介したものがあなたにとって最良の選択肢です。

+0

文字列をバインドするテキストブロックは、リストボックスアイテムのデータテンプレートの一部として使用されます。そのため、文字列は各項目ごとに異なります。あなたの返事をありがとう、私はあなたのソリューションを何とかここで使用できると確信しています。 – SkonJeet

関連する問題