これは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 ステートメントでは、コード ビハインドで選択した値を元の値に戻しますが、ComboBox
UI には入力されません (UI から get アクセサーが起動していることがわかります)。そのような設定SelectedValue
は、UI に対して実際には何もしません。
誰かが私を正しい方向に向けることができたら?