2

ListCollectionViewを使用してフォームにバインドする単純なObservableCollectionリストがあります。

ここに画像の説明を入力

バインド方法を制御したい問題。OKボタンを押したときにのみプロパティが変更されることを意味します。

今のように、「名」を変更してナビゲートすると、値が保存されます。

たとえば、「名」を XXX に変更し、次に移動してから戻ると、x ではなく XXX が表示されます...

これは MainWindow.xaml です。

public partial class MainWindow : Window
{
    private ListCollectionView view;

    private PersonRepository _personRepository;


    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        _personRepository = new PersonRepository();

        this.DataContext = _personRepository.Persons;

        view = (ListCollectionView)CollectionViewSource.GetDefaultView(this.DataContext);
    }


    private void BackButton_Click(object sender, RoutedEventArgs e)
    {
        view.MoveCurrentToPrevious();

        view.Refresh();
    }

    private void OkButton_Click(object sender, RoutedEventArgs e)
    {

    }

    private void NextButton_Click(object sender, RoutedEventArgs e)
    {
        view.MoveCurrentToNext();
    }
}

Person クラスは次のとおりです。

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Age { get; set; }
    public string Description { get; set; }
}

リポジトリはダミーデータを含む ObservableCollection です...私のxamlフィールドは次のようにバインドします:Text="{Binding FirstName, UpdateSourceTrigger=Explicit}"

4

2 に答える 2

2

Personを実装することができますIEditableObject。次に、 [ OK ]ボタンEndEditから呼び出しますが、他のナビゲーションボタンから呼び出します。CancelEdit

そうは言っても、このインターフェースは直感的ではないと思います。

于 2012-05-12T12:03:03.323 に答える
0

BindingGroup を使用してこれを行います。GroupBox などのコンテナー、または単に Person クラスを編集するコントロールを配置する Grid を選択し、コンテナーにこれらすべてのコントロールが含まれていること、および現在の Person オブジェクトがその DataContext であることを確認し、BindingGroup を指定します。それは XAML 定義です。

これにより、現在の Person へのすべてのバインディングのデフォルトの UpdateSourceTrigger が LostFocus から Explicit に変更されます。これは、Person オブジェクトを編集するために使用するコントロールは、バインドされたプロパティを自動的に更新せず、BindingGroup で CommitEdit を呼び出すまで待機することを意味します。これは、明らかに OK ボタンが押されたときに行うことです。Kent が既に提案したように、ナビゲーション ボタンで CancelEdit を呼び出して、OK を押さない場合に現在の Person が更新されないようにします。ロジックは IEditableObject の場合と同じですが、Person クラスを変更する必要はなく、代わりに BindingGroup の動作を使用して目的を達成します。

于 2012-05-12T15:36:57.147 に答える