내 ViewModel에 바인딩 된 소프트웨어 용 사용자 지정 출력 창을 만들려고합니다. 보통 과거에는 항상 TextBox를 사용하고 appendText()
메서드를 사용하여 출력 창에 작성했습니다. 물론 ViewModel을 사용하여 Textbox에 바인딩하려고하면 Text
속성에만 바인딩 할 수 있습니다. 아래는 내가 할 노력하고 무엇 :WPF 바인딩 사용자 지정 출력 창
XAML : 텍스트가 관찰 가능한 컬렉션에 할당 할 수 없기 때문에 물론
<TextBox Text="{Binding Output}"></TextBox>
C#
public class ViewModel : DependencyObject
{
public static readonly DependencyProperty OutputProperty = DependencyProperty.Register("Output", typeof(ObservableCollection<string>), typeof(MVVMTestViewModel), new UIPropertyMetadata(null));
public ObservableCollection<string> Output
{
get
{
return (ObservableCollection<string>)GetValue(OutputProperty);
}
set
{
SetValue(OutputProperty, value);
}
}
public ViewModel()
{
Output = new ObservableCollection<string>();
}
public void OutputMessage(string message)
{
Output.Add(message);
}
}
이 가능하지 않습니다.
참고 : 참고 : ListView 또는 ListBox를 사용하고 관찰 가능한 컬렉션을 사용할 수 있습니다. 그러나 나는 선택 모드를 좋아하지 않는다. TextBox의 텍스트를 강조 표시하여 복사하여 Window 밖으로 붙여 넣을 수 있습니다. isReadOnly
속성을 사용하면이 작업을 매우 쉽게 처리 할 수 있습니다.
쉬운 방법이 있나요? 또 다른 컨트롤 내가 어쩌면 아니지만?
가끔 내 출력이 수천 줄에 (드물게) 있습니다.하지만 그렇다면 새 문자열을 추가 할 때마다 전체 ObservableCollection을 다시 출력하지 않습니까? – jsmith
예 ... 그건 정말로 문제입니다. 바인딩을 통해 쉽게 처리 할 수 있다고 생각하지 않습니다. 아마도 콜렉션에 대한 이벤트 핸들러를 구현해야합니다. –
좋은 링크 또는 이것을 수행하는 방법에 대한 예제를 줄 수 있습니까? 나는 바인딩에 섞인 이벤트 핸들러에 익숙하지 않다. – jsmith