У меня есть приложение wpf, в котором я расширил RichTextBox, чтобы обеспечить некоторые специфические функции.Давайте вызовем этот новый класс BetterTextBox.
Теперь, когда я нажимаю в этом TextBox, вызывается TextBox.OnPreviewMouseLeftButtonUp, и я получаю CaretPosition:
protected override void OnPreviewMouseLeftButtonUp(MouseButtonEventArgs e)
{
PressedOffset = Document.ContentStart.GetOffsetToPosition(CaretPosition);
}
public static readonly DependencyProperty PressedOffsetProperty
= DependencyProperty.Register("PressedOffset", typeof(int),
typeof(ByteViewTextBox),
new FrameworkPropertyMetadata()
{
DefaultValue = 0,
BindsTwoWayByDefault = true,
DefaultUpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
});
public int PressedOffset
{
get { return (int)GetValue(PressedOffsetProperty); }
set { SetValue(PressedOffsetProperty, value); Console.WriteLine("klöjgf");}
}
XAML:
<Window x:Name="MainWindow">
<BetterTextBox />
</Window>
MainWindow имеет MainViewModel в качестве DataContext.Я хочу, чтобы при щелчке мышью в BetterTextBox вызывалась функция в MainViewModel.Как я могу выйти из моего UserControl вызова функции в MainViewModel?
Я пробовал что-то вроде этого:
<Window x:Name="MainWindow">
<BetterTextBox PressedOffset="{Binding ElementName=MainWindow, Path=MyFunction"/>
</Window>
MainViewModel:
public int MyFunction
{
set { callMyRealFunction(); }
}
Но этоне работаетЕсть также способ зарегистрировать CallbackFunction для PressedOffsetProperty, но я не уверен, как зарегистрировать там функцию из MainViewModel, которая не является статичной.