您好我正在使用WPF并使用MVVM模式。所以我的问题是我试图将RichTextBox的选定文本绑定到我的ViewModel中的属性,但我无法绑定Selection属性。
那我该怎么做呢?
将RichTextBox的Selection属性绑定到ViewModel中的属性是我认为将效果和装饰应用于文本的方式。
如果有人知道在ViewModel中更好地了解RichTextBox的选定文本,请告诉我。我开始学习FlowDocuments并使用RichTextBox,这就是为什么我有点迷失。
提前致谢!
答案 0 :(得分:2)
您可以使用Behavior
:
public class RichTextSelectionBehavior : Behavior<RichTextBox>
{
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.SelectionChanged += RichTextBoxSelectionChanged;
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.SelectionChanged -= RichTextBoxSelectionChanged;
}
void RichTextBoxSelectionChanged(object sender, System.Windows.RoutedEventArgs e)
{
SelectedText = AssociatedObject.Selection.Text;
}
public string SelectedText
{
get { return (string)GetValue(SelectedTextProperty); }
set { SetValue(SelectedTextProperty, value); }
}
public static readonly DependencyProperty SelectedTextProperty =
DependencyProperty.Register(
"SelectedText",
typeof(string),
typeof(RichTextSelectionBehavior),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnSelectedTextChanged));
private static void OnSelectedTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var behavior = d as RichTextSelectionBehavior;
if (behavior == null)
return;
behavior.AssociatedObject.Selection.Text = behavior.SelectedText;
}
}
XAML用法:
<RichTextBox>
<i:Interaction.Behaviors>
<local:RichTextSelectionBehavior SelectedText="{Binding SelectedText}" />
</i:Interaction.Behaviors>
</RichTextBox>
(其中SelectedText
是ViewModel上的字符串属性)