CHashtag

[C#/WPF] Listview SelectedItems command Binding (MVVM패턴) 본문

C#/WPF

[C#/WPF] Listview SelectedItems command Binding (MVVM패턴)

HyoSeong 2023. 2. 20. 23:00
반응형

WPF의 Listview는 많은 데이터를 표시할 수 있도록 도와주는 UI 요소 중 하나입니다.

이전에는 SelectedItems 속성을 바인딩하는 것이 불가능했지만, 최신 버전의 WPF에서는 Command로 처리할 수 있도록 업데이트되었습니다.

이번에는 Prism 라이브러리를 이용하여 Mvvm 패턴을 적용한 예제를 살펴보겠습니다.

Prism은 MVVM 패턴을 구현하는 데 도움이 되는 많은 기능을 제공합니다.

 

우선, Prism 라이브러리를 사용하려면 NuGet 패키지 관리자에서 Prism.Core 패키지를 설치해야 합니다.

설치 후, ListView와 Command를 바인딩하는 방법을 알아보겠습니다.

 

ListView의 Behaviors 클래스 가져오기

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:prism="http://prismlibrary.com/"

 

ListView에 대한 Behaviors 클래스를 사용하여 SelectedItems와 연결된 ICommand를 설정합니다.

<ListView Name="myListView" ItemsSource="{Binding MyItems}" SelectionMode="Multiple">
    <i:Interaction.Behaviors>
        <prism:InvokeCommandAction Command="{Binding MyCommand}" CommandParameter="{Binding ElementName=myListView, Path=SelectedItems}" />
    </i:Interaction.Behaviors>
</ListView>

위의 코드에서 MyCommand는 ICommand를 구현한 ViewModel의 속성입니다. 

이 속성은 SelectedItems 속성과 연결됩니다.

 

ViewModel에서 MyCommand 속성을 구현합니다.

public class MainViewModel : BindableBase
{
    private ObservableCollection<string> _myItems;
    private ICommand _myCommand;

    public ObservableCollection<string> MyItems
    {
        get { return _myItems; }
        set { SetProperty(ref _myItems, value); }
    }

    public ICommand MyCommand
    {
        get { return _myCommand; }
        set { SetProperty(ref _myCommand, value); }
    }

    public MainViewModel()
    {
        MyItems = new ObservableCollection<string>() { "Item 1", "Item 2", "Item 3", "Item 4" };
        MyCommand = new DelegateCommand<IList>(OnMyCommandExecuted);
    }

    private void OnMyCommandExecuted(IList selectedItems)
    {
        // do something with selected items
    }
}

 

위의 코드에서 DelegateCommand를 사용하여 MyCommand 속성을 구현합니다. 

이 속성은 SelectedItems 속성과 연결됩니다. OnMyCommandExecuted 메서드에서는 선택된 항목을 처리합니다.

이제 ListView의 SelectedItems를 ICommand와 바인딩하는 방법과 Prism 라이브러리를 사용하여 Mvvm 패턴을 구현하는 방법을 알아봤습니다. 이를 통해 ViewModel에서 ListView의 선택된 항목을 처리할 수 있습니다.

 

감사합니다.

반응형