使用wpf工具包在RichTextBox mvvm中的插入符号处插入文本

使用wpf工具包在RichTextBox mvvm中的插入符号处插入文本,mvvm,prism,richtextbox,wpftoolkit,Mvvm,Prism,Richtextbox,Wpftoolkit,我从列表框中选择了要插入插入符号位置的RichTextBox中的文本。我可以将选定的文本插入到文本字符串的末尾 我不知道如何将RichTextBox插入符号位置传递给我的视图模型 这是我的项目代码的一部分 <Button x:Name="AddItemBtn" Content="Add Item" HorizontalAlignment="Left" Margin="417,10,0,0" VerticalAlignment="Top" Width="100" Co

我从列表框中选择了要插入插入符号位置的RichTextBox中的文本。我可以将选定的文本插入到文本字符串的末尾

我不知道如何将RichTextBox插入符号位置传递给我的视图模型

这是我的项目代码的一部分

            <Button x:Name="AddItemBtn" Content="Add Item" HorizontalAlignment="Left" Margin="417,10,0,0" VerticalAlignment="Top" Width="100" Command="{Binding AddItemBtn}" CommandParameter="{Binding ElementName=AddItemList,Path=SelectedItem}"/>
        <wpftoolkit:RichTextBox  Grid.Column="0" Text="{Binding TestText, UpdateSourceTrigger=PropertyChanged}" x:Name="MyEditor" ScrollViewer.VerticalScrollBarVisibility="Auto" Margin="0" Height="Auto" HorizontalAlignment="Stretch"  VerticalAlignment="Stretch" Width="Auto" IsDocumentEnabled="True" AcceptsTab="True" AcceptsReturn="True" >
            <wpftoolkit:RichTextBox.Resources>
                <Style TargetType="{x:Type Paragraph}">
                    <Setter Property="Margin" Value="0" ></Setter>
                    <Setter Property="FontSize" Value="15"></Setter>
                </Style>
            </wpftoolkit:RichTextBox.Resources>
            <wpftoolkit:RichTextBox.TextFormatter>
                <wpftoolkit:PlainTextFormatter/>
            </wpftoolkit:RichTextBox.TextFormatter>
        </wpftoolkit:RichTextBox>

我尝试了一个flowdocument,但仍然无法正确传递参数。

我想在视图模型上添加一个函数,该函数是在视图代码中设置的

public class MainViewModel : ViewModelBase
{
    public Func<int> GetCarrotPosition { get; set; }
    //...
最后,在命令中调用getCarrorPosition()函数

    var carrotPosition = GetCarrotPosition();
    TestText.Insert(carrotPosition, selectedItem.Command);

在视图模型上创建在视图代码隐藏中连接的代理是我所知的处理UI元素的最性感的MVVM方式。

此外,您可以通过附加的行为完成所有这一切,并拥有实际(可重复)可用的东西,而不是在一个特定视图的代码隐藏中结束视图模型的一半。。。
    public MainWindow()
    {
        // InitializeComponent stuff..
        var castedContext = (MainViewModel)DataContext;
        castedContext.GetCarrotPosition = () =>
        {
            // Placing the cursor at the start of the text returns a value of 2, so I subtract 2 to get the current cursor location
            return MyRichTextBox.CaretPosition.DocumentStart.GetOffsetToPosition(MyRichTextBox.CaretPosition) - 2; 
        };
        //...
    var carrotPosition = GetCarrotPosition();
    TestText.Insert(carrotPosition, selectedItem.Command);