ListView, ComboBox에서 아이템 선택 시 하나(같은)의 TextBox에서 출력을하고 싶습니다.
<ListView x:Name="TestView" />
<TextBox Text="{Binding ElementName=TestView, Path=SelectedItem.Text}" />
TextBox에서 ListView를 ElementName으로 끌어와서 출력 했습니다. (Viewmodel에 추가적인 코드 없이)
이렇게 만들고 나니 ComboBox에서 아이템 선택 시 Text(같은 TextBox로)를 받아 올 좋은 방법을 모르겠습니다.
// MainWindow.xaml
<TextBox Text="{Binding TestTextLyrics}" />
// ViewModel
public string? TestTextLyrics { get; set; }
public event_ListView Or ComboBox(sender, e )
{
TestTextLyrics = Text;
}
임시방편으로는 TestTextLyrics에 바인딩하고,
ListView, ComboBox에서 아이템 선택시 각각 이벤트처리합니다.
이 방법 대신 좋은 방법이 있을까요?
1개의 좋아요
ViewModel 에 SelectedItem 과 Binding 한 property 가 있지 않나요?
2개의 좋아요
// 안좋은 예제
<ListView SelectedItem="{Binding SelectedItem}">
//ViewModel
public ListViewItem SelectedItem { get; set; }
헉… 이게 바인딩이 되네요, 이 거 말 씀하신거 맞나요?
public int SelectedCount { get; set; }
public void ListSelectionChanged(object sender, SelectionChangedEventArgs e)
{
SelectedCount = (sender as ListView).SelectedIndex;
}
이런 기능이 있는 줄모르고… 선택된 아이템인덱스 값 받아와서 처리하고 있었습니다.
총맞고 머리 뚥린 기분이네요. ㅎㄷㄷ
감사합니다.
2개의 좋아요
실제로
이렇게 직접 ListViewItem 을 사용하겠다는 얘기는 아니죠? 아래 예시처럼 하겠다는 얘기죠?
혹시나 하는 맘에서 말씀드리자묜,
ViewModel 에서 ListViewItem 을 직접 property 로 가지면 안 돼요.
ListViewItem 는 view 잖아요.(System.Windows.Control 에서 파생되는 객체예요.)
ViewModel 에서 ListViewItem 을 직접 들고 있으면 안 됩니닷 ㅇㅅㅇ++
(당연히 넘겨주거나 접근하는 거 자체도 안 됩니닷. 그냥 그 타입 자체를 사용하면 안 돼요.)
옴… 그리고
ListView의 SelectionChanged 를 View 에서 Model 이나 ViewModel 에 관계없이 직접 핸들링한다면
public void ListSelectionChanged(object sender, SelectionChangedEventArgs e)
{
// view 조작.
}
이거는 나쁘지 않은 선택이긴해요.
근데 만약 저 핸들러 안에서 ViewModel 에 관련된 로직을 사용한다면
그건 에바 -ㅅ-;;;
(View 에서 ViewModel 의 타입에 접근하는 상황이 발생하죠. 이것두 엄격히는 타입을 깨는 것에 해당해요.)
앞서 작성하신대로 ListView 의 selection 이 변경될 때 ViewModel 에 관련된 로직을 사용해야한다면
SelectedItem 에 binding 한 property의 setter 에서 처리하는 게 좋아요.
view 의 것은 view 에서, ViewModel 의 것은 ViewModel 에서 ㅇㅅㅇ!
4개의 좋아요
조언 감사합니다
무엇이 View, ViewModel인지 구별이 잘 안가네요.
하려고 하는 동작이 → ListViewItem 선택 시 아이템의 정보를 TextBox에 Text 출력
→ ComboBox의 item(ListView와 다른 item) 선택 시 https로 받은 정보를 (같은)TextBox에 Text 출력 입니다.
Setter로 처리하는 방법을 알아보겠습니다…
감사합니다.
말씀 듣고 보니 sender로
ListView, ComboBox 받은 것들이 있네요.
SelectedItem으로 바인딩해서 치워버렸습니다.
감사합니다.
2개의 좋아요