[ WPF ] TextBox Text="{Binding}" 질문입니다.

image

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;
}

이런 기능이 있는 줄모르고… 선택된 아이템인덱스 값 받아와서 처리하고 있었습니다.
총맞고 머리 뚥린 기분이네요. ㅎㄷㄷ

감사합니다. :+1:

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개의 좋아요

조언 감사합니다 :+1:
무엇이 View, ViewModel인지 구별이 잘 안가네요. :face_with_spiral_eyes:

하려고 하는 동작이 → ListViewItem 선택 시 아이템의 정보를 TextBox에 Text 출력
→ ComboBox의 item(ListView와 다른 item) 선택 시 https로 받은 정보를 (같은)TextBox에 Text 출력 입니다.

Setter로 처리하는 방법을 알아보겠습니다…
감사합니다.


말씀 듣고 보니 sender로
ListView, ComboBox 받은 것들이 있네요.
SelectedItem으로 바인딩해서 치워버렸습니다.

감사합니다. :+1::+1:

2개의 좋아요