0

コンボボックスが同じ文字列値を持つことができるシナリオがあります。exaコンボボックスの場合、ドロップダウンに次の値を含めることができます: "Test"、 "Test1"、 "Test1"、 "Test1"、 "Test2"、

選択したインデックスに基づいて、別のコンボボックスを埋めています。私のXamlは次のようになります:

<Grid >
    <Grid.RowDefinitions>
        <RowDefinition Height="40"></RowDefinition>
    </Grid.RowDefinitions>
    <ComboBox ItemsSource="{Binding Path=ComboList, Mode=OneWay}"
              SelectedIndex="{Binding Path=ComboIndex, Mode=TwoWay}"/ >
</Grid>

ViewModelは次のようになります。

class TestViewModel : INotifyPropertyChanged
{
    private IList<string> _comboList = new List<string>
                                      {
                                          "Test",
                                          "Test1",
                                          "Test1",
                                          "Test1",
                                          "Test2",
                                      };       

    public IList<string> ComboList
    {
        get { return _comboList; }
    }


    private int _comboIndex;

    public int ComboIndex
    {
        get { return _comboIndex; }
        set
        {
            if (value == _comboIndex)
            {
                return;
            }

            _comboIndex = value;
            OnPropertyChanged("ComboIndex");
        }
    }

    private void OnPropertyChanged(string prop)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(prop));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

私が直面している問題は、同じ文字列値の間で問題が発生した場合に、SelectedIndexが起動されないことです(インデックス1にある「Test1」からインデックス2にある「Test1」に値を変更するなど)。

4

2 に答える 2

1

そのような関係が必要な場合は、ビューモデルで関係を作成し、このコレクションにバインドするだけです。

 public class MyItem
 {
    public string Name {get; set;}//your Test, Test1, Test1 ...
    public List<string> Childs {get; set;} // the childs depending on the the Name
 }

ビューモデルで、MyItemのリストを作成し、必要に応じて入力できるようになりました。

 public List<MyItem> MyItemList {get;set;}

xamlでは、関連するコンボボックスを簡単に作成できるようになりました。

 <ComboBox ItemsSource="{Binding Path=MyItemList}"
          SelectedItem="{Binding Path=ComboIndex, Mode=TwoWay}"/ >

 <ComboBox ItemsSource="{Binding Path=ComboIndex.Childs}"
          SelectedItem="{Binding Path=MySelectedPropForChild, Mode=TwoWay}"/ >

したがって、すでに関係を構築しているため、インデックスを気にする必要はありません。

于 2012-06-13T07:30:47.993 に答える
0

にバインドする代わりにList<string>、文字列をカプセル化します。

public class Item
{
    public Item(string v){ Value = v; }
    public string Value{get; private set;}
}

にバインドしList<Item>ます。

次に、Xamlを修正してDisplayMemberPathを指定します

<ComboBox ItemsSource="{Binding Path=ComboList, Mode=OneWay}"  
          DisplayMemberPath="Value"
          SelectedIndex="{Binding Path=ComboIndex, Mode=TwoWay}"/ >  

それは私のために働いた。

于 2012-06-13T06:51:47.873 に答える