0

ItemsSourceプロパティがObservableCollectionプロパティにバインドされ、SelectedIndexプロパティが整数プロパティにそれぞれバインドされているコンボボックスがあります。

<ComboBox Name="cmbDealt" ItemsSource="{Binding Path=DealList, Mode=TwoWay}" SelectedIndex="{Binding Mode=TwoWay, Path=DealIndex}"></ComboBox>
<CheckBox IsChecked="{Binding Mode=TwoWay, Path=SomeCondition}" Content="Some Condition"></CheckBox>

私のデータ構造は次のようになります

 private ObservableCollection<string> m_DealList = null;
    private int m_DealIndex = 0;
    private bool m_SomeCondition = false;

    public ObservableCollection<string> DealList
    {
        get
        {
            if (m_DealList == null)
                m_DealList = new ObservableCollection<string>();
            else
                m_DealList.Clear();

            if (m_SomeCondition)
            {
                m_DealList.Add("ABC");
                m_DealList.Add("DEF");
            }
            else
            {
                m_DealList.Add("UVW");
                m_DealList.Add("XYZ");
            }
            return m_DealList;
        }
    }

    public int DealIndex
    {
        get { return m_DealIndex; }
        set
        {
            if (value != -1)
            {
                m_DealIndex = value;
            }
        }
    }

    public bool SomeCondition
    {
        get { return m_SomeCondition; }
        set
        {
            m_SomeCondition = value;
            OnPropertyChanged("DealList");
            OnPropertyChanged("DealIndex");
        }
    }

これで、アプリケーションが正常に読み込まれます。ただし、ユーザーがComboBoxのSelectedIndexを0から1に変更し、チェックボックスをオンにすると(「DealIndex」プロパティの変更イベントを呼び出すため)、アプリケーションがクラッシュします。

なぜこれが起こっているのかわかりません。誰かが光を当てて解決策を提案できますか?

TIA...スディープ

4

2 に答える 2

0

1 つのオプションは、バインディングを selectedindex から selecteditem に変更することです。同じことができます。私はもともとselectedindexを変更しようとして始めましたが、成功することはありませんでした。たぶん読み取り専用だと思います。

于 2009-06-15T13:36:28.010 に答える
0

発砲する必要はありません

OnPropertyChanged("DealList");

プロパティは ObservableCollection であるためです。つまり、オブザーバー パターンを実装し、アイテムが追加および削除されると、独自に起動します。

ユーザーがユーザー インターフェイスを介してアイテムを更新できる場合を除き、ObservableCollection のバインド モードを TwoWay に設定する必要はありません。あなたのコードがそれを許可しているようには見えません。

複数の CheckBox がない限り、CheckBox でアクションを実行する代わりに、ComboBox で SelectedIndexChanged を使用することもできます。これは、より良いユーザー エクスペリエンスを提供するための単なる考えです。

于 2010-04-15T14:06:35.183 に答える