私はリストボックスを銀色にしています。ユーザーが何をしているのかを検証し、現在のアイテムが有効でない場合は、別のアイテムを選択しないようにします。これは、リストボックスで選択したアイテムに対応する編集ウィンドウ内の他のフィールドを表示しているためです。アイテムを停止するリストボックスで選択中
どうすればいいですか?これは、
<ListBox SelectedItem="{Binding SelectedTemplate, Mode=TwoWay}" />
</ListBox>
のviewmodelは次のようになり、私が現在持っているもの
public EmailTemplateEntity SelectedTemplate
{
get { return selectedTemplate; }
set
{
if (not valid)
{
RaisePropertyChanged(this, x => x.SelectedTemplate); // to reset it to the previous value
}
else
{
selectedTemplate = value;
}
}
}
である。しかし、それは動作しません。 getterは、有効でないコードにドロップされた場合に呼び出されますが、選択した項目は前の項目ではなく選択した項目です。
UPDATE:
だからここに私は、
私はアイテムのTest1を選択するだけを許可するように期待public class ViewModel : INotifyPropertyChanged
{
public string SelectedItem
{
get
{
return "Test1";
}
set
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("SelectedItem"));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
を
<ListBox SelectedValuePath="Content" SelectedValue="{Binding SelectedItem, Mode=TwoWay}">
<ListBoxItem>Test</ListBoxItem>
<ListBoxItem>Test1</ListBoxItem>
<ListBoxItem>Test2</ListBoxItem>
<ListBoxItem>Test3</ListBoxItem>
<ListBoxItem>Test4</ListBoxItem>
</ListBox>
とのviewmodelをWPFアプリを書かれていますしかし、それは同じことをします。
私はアイテムをviewmodelの文字列リストにして、itemssourceをそのリストにバインドする場合も同様です。
スヌープを使用すると、問題のヒントが得られます。 SelectedValueは正しく設定されていますが、コントロールには「SelectedItems」というリストがあり、これは正しく設定されていません。これは読み取り専用フィールドです。
ありがとうございました。私は私の質問で私のコードを簡素化しようとしていた。どちらの場合でもプロパティを変更することを含めて、あなたが持っているものとほぼ同等です。私は少しそれを変更し、あなたが提案するものは動作していません。これには何かもっと間違ったことがなければなりません。私は、新しいVSプロジェクトを開始し、問題をより詳細に分離しようとするかもしれません。 – peter