Создайте SearchCommand в wpf, используя Mvvm, который загружает новые данные в мой список

Я мог бы использовать некоторую помощь, пытаясь понять, как команды работают в Wpf с Mvvm и как вы привязываете к нему кнопку. Прочитал много статей о командах и wpf, но все они кажутся разными.

Я создал проект wpf, используя шаблон mvvm. Имейте представление списка, которое будет заполнено клиентами.

Теперь я хочу сделать команду поиска, чтобы я мог изменить данные в виде списка.

CustomerViewModel

public class CustomerViewModel : INotifyPropertyChanged, ICommand
{
    private List<Customer> CustomerList;

    public CustomerViewModel()
    {
        CustomerList = LoadCustomerData();
    }

    public List<Customer> LoadCustomerData()
    {
        List<Customer> data = new List<Customer>();
        data.Add(new Customer() { Id = 1, FirstName = "Alexander", LastName = "Malkovich", PhoneNumber = "43215678", Email = "[email protected]" });
        data.Add(new Customer() { Id = 2, FirstName = "Mikkel", LastName = "Larsen", PhoneNumber = "87654321", Email = "[email protected]" });

        return data;
    }

    public List<Customer> CustomerDataLoadedOnSearch()
    {
        List<Customer> data = new List<Customer>();
        data.Add(new Customer() { Id = 1, FirstName = "Ulrik", LastName = "Trissel", PhoneNumber = "35325235", Email = "[email protected]" });
        data.Add(new Customer() { Id = 2, FirstName = "Michael", LastName = "Mortensen", PhoneNumber = "14214124", Email = "[email protected]" });

        return data;
    }

    public List<Customer> Customer
    {
        get
        {
            return CustomerList;

        }

    }

    // Search Command


    #region INotifyPropertyChanged members

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;

        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    #endregion

}

По сути, я запускаю LoadCustomerData () в ctor и получаю CustomerList с помощью метода get.

Я пытаюсь создать команду поиска, которая запустит другой метод (CustomerDataLoadedOnSearch), а затем снова вызовет вызов get в представлении.

XML-код представления:

<StackPanel Orientation="Vertical">
            <Button Command="{Binding SearchCommand}" Padding="15, 5" HorizontalAlignment="Right">Search</Button>
        </StackPanel>
        <GroupBox Header="Customers">
            <StackPanel Margin="10, 10" Orientation="Vertical">
                <ListView Height="250" Width="Auto" ItemsSource="{Binding Customer}" Grid.Row="1">
                    <ListView.View>
                        <GridView >
                            <GridViewColumn Header="ID" Width="Auto">
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding Id}" TextAlignment="Right" Width="40"/>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn DisplayMemberBinding="{Binding FirstName}" Header="First name" Width="100"/>
                            <GridViewColumn DisplayMemberBinding="{Binding LastName}" Header="Last name" Width="100"/>
                            <GridViewColumn DisplayMemberBinding="{Binding PhoneNumber}" Header="Phone" Width="100"/>
                            <GridViewColumn DisplayMemberBinding="{Binding Email}" Header="Email" Width="200"/>
                        </GridView>
                    </ListView.View>
                </ListView>
            </StackPanel>
        </GroupBox>

Связали команду под названием SearchCommand. Теперь я не уверен, что делать дальше. Должен ли я создать папку с именем Command и сохранить все команды для всех моих кнопок, которые я делаю?

Или я должен хранить весь код ICommand во ViewModel? Надеюсь, кто-то может показать мне, как это работает.

Добрый день.

Обновить:

Пока спасибо за ваши ответы.

Мне удалось реализовать класс ViewModelBase & RelayCommand. Кроме того, я реализовал Icommand кнопки поиска, но когда я нажимаю на нее, она очищает список (представление теряет своих клиентов).

void SearchCommand_DoWork(object obj)
{
     CustomerList.Clear();
     CustomerList = CustomerDataLoadedOnSearch();            
}

Отладка CustomerList, и когда я вызываю CustomerDataLoadedOnSearch, у него есть две строки с новыми клиентами внутри, но список не заполнен.

Ответы на вопрос(1)

Ваш ответ на вопрос