【发布时间】:2015-02-25 16:01:37
【问题描述】:
我的 MainPage.xaml 中的代码
<TextBox x:Name="TextTextBox"
Text="{Binding Path=Text, Mode=TwoWay}"
TextWrapping="Wrap" />
.
.
.
<!--Button with some Command-->
<Button x:Name="SearchButton"
Content="Search"
HorizontalAlignment="Center"
Command="{Binding Command}"/>
我的 ViewModel 中的代码(与 TextBox 绑定的属性)
public string Text
{
get
{
return ssModel.Text;
}
set
{
ssModel.Text = value;
OnPropertyChanged();
}
}
当您按下 SearchButton 时,正在执行返回整数列表的命令(此整数是 TextBox 中着色的索引)。
例如我有文字:
LoremIpsumDolorSitAmet
然后我按下搜索按钮,命令返回给我例如三个数字 {2, 5, 13} 的列表。现在我想在这个位置上为 TextTextBox 字符着色,所以我想得到类似的东西:
这正是我想要得到的。在指定位置为 TextTextBox 中的文本着色。
我将 TextBox 更改为 RichEditBox 并编写 DependencyProperty 以将控件与视图模型中的属性绑定。这是具有 DependencyProperty 的类:
public class RichTextC : DependencyObject
{
public static string GetRichText(DependencyObject obj)
{
return (string)obj.GetValue(RichTextProperty);
}
public static void SetRichText(DependencyObject obj, string value)
{
obj.SetValue(RichTextProperty, value);
}
public static readonly DependencyProperty RichTextProperty =
DependencyProperty.Register("RichText", typeof(string), typeof(RichTextC), new PropertyMetadata(string.Empty, callback));
private static void callback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var reb = (RichEditBox)d;
reb.Document.SetText(TextSetOptions.FormatRtf, (string)e.NewValue);
}
}
和 MainPage.xaml 中的 RichEditBox:
<RichEditBox local:RichTextC.RichText="{Binding MyRichText, Mode=TwoWay}"
Margin="0,30,0,0""/>
但是我还有一个问题,因为这个 DependencyProperty 只绑定了一种方式。当我在视图模型控件中设置属性的文本/内容时,MainPage 上的 RichEditBox 将被通知并显示新文本。但是当我在 MainPage 更改 RichEditBox 的内容时,它不会通知 View Model 中的属性 - 因此从 View 到 View Model 的绑定不起作用。
【问题讨论】:
标签: c# textbox windows-store-apps winrt-xaml text-coloring