0

コード ビハインドから WPF ListBox の選択された項目にバインドされた項目の選択に問題があります (mvvm パターンを使用しています)。奇妙なことに、以前は機能していましたが、現在は機能していません。その様子を紹介します。

これは私の User Cotrol 内の ListBox です

<ListBox ItemsSource="{Binding TrainerClassesList}" 
                  DisplayMemberPath="Description" 
                  SelectedItem="{Binding SelectedTrainerClass, Mode=TwoWay}"  />

これは、選択した項目がバインドされているビュー モデルのプロパティです。

public TrainerClassClientEntity SelectedTrainerClass
        {
            get
            {
                return selectedTrainerClass;
            }

            set
            {
                if (EditingTrainerClass != null && !EditingTrainerClass.Equals(SelectedTrainerClass) && !EditingTrainerClass.Equals(value) && BtnSave.CanExecute(null))
                {
                    MessageBoxResult result = MessageBox.Show("Unsaved changes will be lost. Do you want to save?",
                        "Attention",
                        MessageBoxButton.YesNo,
                        MessageBoxImage.Question,
                        MessageBoxResult.Yes);
                    if (result == MessageBoxResult.Yes)
                    {
                        BtnSave.Execute(null);
                    }
                }

                selectedTrainerClass = value;

                EditingTrainerClass = Mapper.Clone<TrainerClassClientEntity>(selectedTrainerClass);

                Raise(() => SelectedTrainerClass);
            }
        }

基本的に何が起こるかというと、ユーザー コントロールなどのテキスト ボックスに変更を加えたときに、選択した項目を直接変更することはありません。選択したアイテムのコピーを変更し、保存ボタン (ここには表示されていません) を押すと、変更が適用されます。

私が数日前に達成したのは、項目をリストに追加して選択する単純なボタンでした。以前は機能していましたが、現在は機能していません。これがボタンのアクションです (これを行うために ICommand インターフェイスを使用しました。コード全体をわざわざコピーして貼り付けるつもりはありません)。

private void AddTrainerClass()
        {
            TrainerClassClientEntity trainerClass = new TrainerClassClientEntity();
            ViewModel.TrainerClassesList.Add(trainerClass);
            ViewModel.SelectedTrainerClass = trainerClass;
        }

今、私はそれがもう機能しないようにするために何をしたのか正確にはわかりません. ビューモデルのプロパティを変更することをデバッグによって学びましたが、ユーザーインターフェイスを更新しないようです。

最近、テキストボックスにいくつかのバリデーターを追加しましたが、それが問題でしょうか? 次に例を示します。

<TextBox Grid.Row="0" Grid.Column="1" Height="25" VerticalAlignment="Center" Margin ="10 5" >
    <TextBox.Text>
        <Binding Path="EditingTrainerClass.Description" 
                    UpdateSourceTrigger="PropertyChanged" 
                    Mode="TwoWay">
            <Binding.ValidationRules>
                <validators:StringNotNullOrWhiteSpaceValidationRule 
                    ValidatesOnTargetUpdated="True"
                    ErrorMessage="The field cannot be empty."/>
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

また、私はカスタム WPF テーマを使用していることに言及する価値があると思います。しかし、私がそれを使用していた間、それはまだ機能していました。

よろしくお願いいたします。

4

1 に答える 1

0

[選択したアイテムに]変更を適用するはずのメソッドがありますが、このメソッドからコードを省略しない限り、変更を適用するようには見えません...確かに値をコピーする必要があります現在選択されているアイテムから新しいアイテムへ? 次のようなもの:

private void AddTrainerClass()
{
    TrainerClassClientEntity trainerClass = new TrainerClassClientEntity(
        ViewModel.SelectedTrainerClass);
    ViewModel.TrainerClassesList.Add(trainerClass);
    ViewModel.SelectedTrainerClass = trainerClass;
}

またはこのようなもの:

private void AddTrainerClass()
{
    TrainerClassClientEntity trainerClass = new TrainerClassClientEntity();
    trainerClass.CopyValuesFrom(ViewModel.SelectedTrainerClass);
    ViewModel.TrainerClassesList.Add(trainerClass);
    ViewModel.SelectedTrainerClass = trainerClass;
}
于 2013-10-27T16:15:04.913 に答える