3

これはComboBox、XAML でインスタンス化されたものです

<Combobox ItemsSource="{Binding Path=Delimiters}" DisplayMemberPath="Key"
          SelectedValue="{Binding Path=SelectedDelimiter, UpdateSourceTrigger=PropertyChanged}" />

Dictionaryコンストラクターに入力されたビュー モデルの対応するバインディングを次に示します。

private IDictionary<string,string> _delimiters;

public IDictionary<string,string> Delimiters
{
   get{return _delimiters;}
   set{_delimiters = value;  RaisePropertyChanged("Delimiters");}
}

private KeyValuePair <string, string> _selectedDelimiter;
public KeyValuePair <string, string> SelectedDelimiter
{
    get{return _selectedDelimiter;}
    set{
       if(value.Key != _selectedDelimiter.Key || value.Value != _selectedDelimiter.Value)
       {
           var prevDelimiter = _selectedDelimiter;
           _selectedDelimiter = value;
           if(IllegalDelimiter.Contains(_selectedDelimiter)
           {
                 MessageBox.Show("errror", "error");
                 _selectedDelmiter = prevDelimiter;
           }
           RaisePropertyChanged("SelectedDelimiter");
       }

    }
}

選択した値を元に戻すのに問題があります。Dictionaryがバインドされており、UI に変更を加えると、ComboBox設定が正しく起動されます。不正な区切り文字であるかどうかを確認する if ステートメントでは、コード ビハインドで選択した値を元の値に戻しますが、ComboBoxUI には入力されません (UI から get アクセサーが起動していることがわかります)。そのような設定SelectedValueは、UI に対して実際には何もしません。

誰かが私を正しい方向に向けることができたら?

4

2 に答える 2

6

SelectedValuePathを使用する場合はSelectedValue、おそらくに設定する必要がありますValueSelectedValueは「選択」を行っているため、プロパティタイプも異なる必要があります。

全体を保持したい場合は、代わりにKeyValuePairバインドする必要があります。SelectedItem

于 2011-11-19T03:14:54.450 に答える
1

理解するのに時間がかかりましたが、正しく設定していましたが、セッターで同じプロパティを更新していたため、ディスパッチャーを使用して新しいスレッドを作成し、更新を正しく行う必要がありました。

于 2011-11-30T15:09:07.127 に答える