In der benutzerdefinierten RichEditBox habe ich eine benutzerdefinierte DependencyProperty namens Text. Mein Ziel besteht einfach darin, diese Eigenschaft in zwei Richtungen an eine Zeichenfolgeneigenschaft zu binden, die sich in meinem ViewModel befindet. Auf diese Weise kann ich die Zeichenfolge in meinem ViewModel verwenden, um Text in meiner benutzerdefinierten RichEditBox festzulegen.
Für Ihr Szenario könnten Sie eine CustomText
Eigenschaft für die benutzerdefinierte RichEditBox
erweitern. Wie Sie wissen, können Sie String für RichEditBox
von Document.SetText
und Document.GetText
Methode abrufen oder festlegen. Und dann könnten Sie den Textwechsel von RichEditBox
von TextChanged
Ereignis hören. Ich habe eine CustomRichEditBox
mit bidirektionaler Bindung CustomText -Eigenschaft erstellt. Bitte verweisen Sie auf den folgenden Code.
public string CustomText
{
get { return (string)GetValue(CustomTextProperty); }
set
{
SetValue(CustomTextProperty, value);
}
}
public static readonly DependencyProperty CustomTextProperty =
DependencyProperty.Register("CustomText", typeof(string), typeof(CustomRichEditBox), new PropertyMetadata(null, new PropertyChangedCallback(OnCustomTextChanged)));
private static void OnCustomTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
CustomRichEditBox rich = d as CustomRichEditBox;
if (e.NewValue != e.OldValue)
{
rich.Document.SetText(Windows.UI.Text.TextSetOptions.None, e.NewValue.ToString());
}
}
die Änderungen von RichEditBox
Text überwachen dynamisch die View-model
ändern.
public CustomRichEditBox()
{
this.DefaultStyleKey = typeof(RichEditBox);
this.TextChanged += CustomRichEditBox_TextChanged;
}
private void CustomRichEditBox_TextChanged(object sender, RoutedEventArgs e)
{
string value = string.Empty;
this.Document.GetText(Windows.UI.Text.TextGetOptions.AdjustCrlf, out value);
if (string.IsNullOrEmpty(value))
{
return;
}
CustomText = value;
}
Wenn Sie Ansichtsmodell an die Steuerung von Ihrem binden Code-Behind-Datei, die Sie den folgenden Code verweisen könnte.
Binding myBinding = new Binding();
myBinding.Source = this.DataContext;
myBinding.Path = new PropertyPath("Info");
myBinding.Mode = BindingMode.TwoWay;
myBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
BindingOperations.SetBinding(MyEditBox, CustomRichEditBox.CustomTextProperty, myBinding);
Ich habe die code sample auf Github hochgeladen. Bitte prüfe.
Was haben Sie versucht? Hast du einen Code, mit dem du anfangen kannst? –