Subdialog отображается еще раз при каждой активации родительского диалога - PullRequest
0 голосов
/ 25 января 2019

Я разработал приложение, в котором пользователь размещает заказ по списку.Если выбран порядок, отображается окно EditOrderWindow.Из этого окна пользователь может добавлять товары в Заказ с помощью.Это делается в поддиалоге AddItemWindow.Работает нормально для первого заказа.

Однако, если редактируется второй заказ, AddItemWindow снова отображается после его закрытия.Для третьего отредактированного заказа это показывает три раза также.

Я не мог понять, почему это происходит, и как это предотвратить.

ViewModel

public class ViewModel
{
    public ICommand EditOrderCommand { get; set; }
    public ICommand AddItemCommand { get; set; }

    public event EventHandler<int> EditOrder;
    public event EventHandler<int> AddItem;
    public event EventHandler<int> ItemAdded;

    public ViewModel()
    {
        //Is fired when an item in the datagrid in Control OrderList is doubleclicked
        EditOrderCommand = new ICommand();
        EditOrderCommand.Executed += EditOrderCommand_Executed();

        //Is fired when the users click on add in EditOrderWindow
        AddItemCommand = new ICommand();
        AddItemCommand.Executed += AddItemCommand_Executed();
    }

    private void EditOrderCommand_Executed(object sender, EventArgs e)
    {
        if (SelectedOrder != null)
        {
            EditOrder(this, SelectedOrder.Id);
        }            
    }

    private void AddItemCommand_Executed(object sender, EventArgs e)
    {
        AddItem(this, new EventArgs());
    }

}

Управление: OrderList

public partial class OrderList : UserControl
{
    ViewModel vm;

    public OrderList()
    {
        InitializeComponent();

        //DataContext is set in xmal
        vm = (ViewModel)this.DataContext;

        vm.EditOrder += Vm_EditOrder;
    }       

    private void Vm_EditOrder(object sender, int e)
    {
        EditOrderWindow s = new EditOrderWindow(vm);          
        s.ShowDialog();
        s = null;
    }

Окно: EditOrderWindow

public partial class EditOrderWindow : Window
{
    ViewModel vm;
    AddItemWindow aiw;

    public EditOrderWindow(ViewModel _vm)
    {

        InitializeComponent();

        vm = _vm;
        this.DataContext = vm;

        vm.AddItem -= Vm_AddItem;
        vm.AddItem += Vm_AddItem;

    }

    private void Vm_AddItem(object sender, EventArgs e)
    {
        if (aiw == null)
        {
            aiw = new AddItemWindow(vm);
        }

        aiw.ShowDialog();
        aiw = null;
    }
}

Окно: AddItemWindow

public partial class AddItemWindow : Window
{
    public AddItemWindow(ViewModel _vm)
    {
        InitializeComponent();

        this.DataContext = _vm;

        _vm.ItemAdded -= _vm_ItemAdded;
        _vm.ItemAdded += _vm_ItemAdded;

    }

    private void _vm_ItemAdded(object sender, EventArgs e)
    {

        this.Close();

    }   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...