我想为我的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的文本,以便我可以将它复制并粘贴到窗口外面。 isReadOnly
属性允许我很容易地做到这一点。
有没有简单的方法来做到这一点?另一种控制我可能没有看到?
我的输出有时在成千上万行(很少)..但是,当它是,每次我添加一个新的字符串时,这不会重新输出整个ObservableCollection? – jsmith
是的......这确实是一个问题。我认为你不能通过约束来轻松应对。你可能应该为集合实现事件处理程序 –
你能给我一个很好的链接,甚至是一个关于如何做到这一点的例子吗?我并不真正熟悉混合绑定的事件处理程序.. – jsmith