2012-04-18 22 views
0

私はリストボックスとラベルを持つ単純なウィンドウを持っています。ラベルに表示されている選択されたものの後のリストボックスの次の項目になるように、LabelBoxをListBoxにバインドしたいと思います。 私はこのようなコンバータとれる多を使用しようとしました:WPFのListBoxへのバインド.Items

<Label> 
     <MultiBinding Converter="{StaticResource myConverter}"> 
      <Binding ElementName="lbox" Path="Items"/> 
      <Binding ElementName="lbox" Path="SelectedIndex"/> 
     </MultiBinding>--> 
</Label>  

public class MyConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     object[] items = values[0] as object[]; 
     int index = (int)(values[1]) + 1; 
     return (items[index]).ToString(); 

    } 
    ..... 
} 

しかし、それは動作しません。問題は、ListBoxItemの配列を取得できないことです。私を助けてくれますか?

+0

はあなたのMultiBindingので代わりのSelectedItemのSelectedIndexをを使用してみてください。 (このコードは動作しても非常に脆いことに注意してください) – Alan

答えて

2

ここにいくつか間違いがあります。

  1. アレイから何かを取得する前に、インデックス値をチェックしていません。選択がない場合、または最後の行を選択するとどうなりますか?

  2. は、リストボックスの項目のToStringメソッド()メソッドを呼び出すと、あなたを与えるだろう「System.Windows.Controls.ListBoxItem:項目のテキスト」

  3. 最後に、そしておそらく最も直接あなたの質問に答える、という事実でありますItemsプロパティはオブジェクト[]ではなく、実際はItemsCollectionです。あなたのコードは次のようになります。

    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
        System.Windows.Controls.ItemCollection items = values[0] 
             as System.Windows.Controls.ItemCollection; 
    
        int index = (int)(values[1]) + 1; 
    
        ... 
    } 
    
1

コードスニペットは正しいですか? SelectedValueではなく、SelectedIndexが必要だと私は思っています(私があなたの質問を正しく理解していれば)。少なくともあなたには、いくつかのエラーは、あなたの計算されたインデックスが範囲内にまだあることを確認するため、コンバータにチェックしている必要があること、

<Label> 
     <MultiBinding Converter="{StaticResource myConverter}"> 
      <Binding ElementName="lbox" Path="Items"/> 
      <Binding ElementName="lbox" Path="SelectedIndex"/> 
     </MultiBinding> 
</Label> 

注意です 。

+0

私はSelectedItemとSelectedIndexを混在させています。しかし、それはコードの単なる誤りであり、問​​題を解決しません。問題は、listboxItesの配列を取得できないことです。 Object [] itemsは常にnull値です。 –

+0

私はあなたが助けてくれることをかなり包括的にしている@ExitMusicによって与えられた答えを見てみるといいでしょう。 –

関連する問題