2015-12-07 2 views
0

В настоящее время я изучаю и работаю над простым приложением WPF (MVVM pattern), которое позволяет выбирать элементы из одного списка (доступные элементы) другому (заказ) и создавать экземпляр класса экземпляра один раз «покупать» 'нажата кнопка.WPF ListView выбор по фокусу потерял

Моя проблема в том, что как только я нажму на первый список - элемент выбран, и я не могу отменить его, как только фокус потерян.

Я много узнал о событиях и командах в MVVM, но вещи действительно смешались в моей голове. Не могли бы вы направить меня на простой способ, как можно «обновить»/отменить выбор всех предметов, как только фокус будет потерян в списке?

спасибо.

+0

Set SelectedItem в списке, чтобы обнулить или SelectedIndex до -1 – CoderForHire

+0

Не могли бы вы предоставить несколько примеров? Поскольку нам не разрешено создавать кодовые события в соответствии с шаблоном MVVM. Должно ли это быть сделано с помощью команд? – Dmytro

+0

В режиме MVVM все взаимодействия между View и ViewModel shoudl выполняются с помощью команд, это хорошая практика. – A191919

ответ

0

Вот быстрый и грязный пример использования привязок. Вы, вероятно, придется изменить некоторые его для ваших нужд:

В XAML

<Grid> 

    <ListBox Name="customerList1" 
       ItemsSource="{Binding List1Customers}" 
       SelectedItem="{Binding List1SelectedCustomer, Mode=TwoWay}"/> 

    <ListBox Name="customerList2" 
       ItemsSource="{Binding List2Customers}" 
       SelectedItem="{Binding List2SelectedCustomer, Mode=TwoWay}"/> 

</Grid> 

ViewModel

public class Customer 
{ 
    public int id { get; set; } 
} 

public class MyViewModel 
{ 
    // This is the collection the first list gets its data from 
    private ObservableCollection<Customer> list1Customers; 
    public ObservableCollection<Customer> List1Customers 
    { 
     get { return list1Customers; } 
     set 
     { 
      if (list1Customers != value) 
      { 
       list1Customers = value; 
      } 
     } 
    } 

    // This is the customer selected in the first list 
    private Customer list1SelectedCustomer; 
    public Customer List1SelectedCustomer 
    { 
     get { return list1SelectedCustomer; } 
     set 
     { 
      if (list1SelectedCustomer != value) 
      { 
       list1SelectedCustomer = value; 
      } 
     } 
    } 



    // This is the collection the second list gets its data from 
    private ObservableCollection<Customer> list2Customers; 
    public ObservableCollection<Customer> List2Customers 
    { 
     get { return list2Customers; } 
     set 
     { 
      if (list2Customers != value) 
      { 
       list2Customers = value; 
      } 
     } 
    } 

    // This is the customer selected in the second list 
    private Customer list2SelectedCustomer; 
    public Customer List2SelectedCustomer 
    { 
     get { return list2SelectedCustomer; } 
     set 
     { 
      if (list2SelectedCustomer != value) 
      { 
       list2SelectedCustomer = value; 
      } 
     } 
    } 


    public void MoveCustomer(int id) 
    { 
     // Find the customer from list 1 
     var customerToMove = List1Customers.Where(x => x.id == id).FirstOrDefault(); 

     // If it was found... 
     if (customerToMove != null) 
     { 
      // Make the first customer null, which un selects it in the list 
      List1SelectedCustomer = null; 

      // Remove the customer from list 1, or comment out if you dont want it removed 
      List1Customers.Remove(customerToMove); 

      // Add the customer to list 2 
      List2Customers.Add(customerToMove); 

      // Make the newly addec customer in list 2 selected 
      List2SelectedCustomer = List2Customers.Where(x => x.id == id).FirstOrDefault(); 
     } 
    } 
} 
Смежные вопросы