728x90
반응형
안녕하세요. 오늘은 C# WPF Prism을 이용해서 ListBox 혹은 ListView의 선택한 아이템을 찾는 방법을 알아보도록 하겠습니다.
A.xmal 코드입니다.
<ListView ItemsSource="{Binding Items}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<prism:InvokeCommandAction Command="{Binding SelectCommand}" CommandParameter="{Binding SelectedItem, RelativeSource={RelativeSource AncestorType=ListView}}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<ListView.ItemTemplate>
<DataTemplate>
<WrapPanel>
<materialDesign:PackIcon
Width="20"
Height="20"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Kind="{Binding SetMainIcon}" />
<materialDesign:PackIcon
HorizontalAlignment="Center"
VerticalAlignment="Top"
Kind="{Binding SetSubIcon}" />
<TextBlock
Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Text="{Binding SetName}" />
</WrapPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
바인딩 과정은 생략하도록 하겠습니다. 혹여나 필요하시다면, 댓글로 알려주세요.
A_ViewModel.cs 입니다.
public ICommand SelectCommand => new DelegateCommand<object>(SelectedItem);
private void SelectedItem(object obj)
{
if (obj is A_LisBox { SetName: not null } item)
{
var index = FindIndexByName(item.SetName);
if (index != -1)
{
//찾는 아이템 데이터 처리
}
}
}
private int FindIndexByName(string name)
{
var item = items.FirstOrDefault(x => x.SetName == name);
if (item == null) return -1;
return items.IndexOf(item);
}
간략하게 설명드리면 A.xaml에서 EventTrigger의 이벤트를 ViewModel에서 ICommand <Object>선언하여 내용을 받아 옵니다.
SelectedItem(object obj) 함수내 if문은 object에서 받아온 내용중 내가 찾고 싶은 아이템이 null이 아닌지 확인 후에 if문 안으로 들어오게됩니다.
FindIndexByName(string name) 아이템 중 일치한지 확인 후 해당하는 Index 값을 int값으로 리턴 시킵니다.
ListBox, ListView 모두 똑같은 방식이지만 차이점은 아래의 xaml를 참고하시면 됩니다.
<!--ListView-->
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<prism:InvokeCommandAction Command="{Binding SelectCommand}" CommandParameter="{Binding SelectedItem, RelativeSource={RelativeSource AncestorType=ListView}}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<!--ListView-->
<!--ListBox-->
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<prism:InvokeCommandAction Command="{Binding SelectCommand}" CommandParameter="{Binding SelectedItem, RelativeSource={RelativeSource AncestorType=ListBox}}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<!--ListBox-->
최근 프로젝트하다가 많이 쓰게되어서 혹시나 싶어 도움될까 작성하니 참고하여 쓰시길 바랍니다.
혹여나 틀린 부분은 피드백 해주시면 수정하겠습니다! 감사합니다.
728x90
반응형
'C# > WPF (MVVM)' 카테고리의 다른 글
[C# / WPF / MVVM / Prism] DataGrid Binding #2 - 수정 (1) | 2024.07.15 |
---|---|
[C# / WPF / MVVM / Prism] DataGrid Binding # 1 - 생성 (0) | 2024.07.15 |
[C# WPF] Textblock Binding (텍스트블럭 바인딩) (0) | 2023.07.26 |
[C# WPF / MVVM] 이벤트 바인딩 (Event Binding) (0) | 2023.07.25 |
[C# WPF / MVVM] 콤보박스 데이터 바인딩 (Combobox Data Binding) #2 (0) | 2023.07.25 |