使用wpf工具包在RichTextBox mvvm中的插入符号处插入文本
我从列表框中选择了要插入插入符号位置的RichTextBox中的文本。我可以将选定的文本插入到文本字符串的末尾 我不知道如何将RichTextBox插入符号位置传递给我的视图模型 这是我的项目代码的一部分使用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
<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);