Sl 4,MVVM:在TextBlock中使用Inlines,如何绑定到ViewModel?

时间:2011-03-29 13:08:37

标签: silverlight-4.0 mvvm


我们通过向TextBlock.Inlines添加一系列System.Windows.Documents.Run对象来格式化TextBlock的文本。

我们如何绑定ViewModel中的格式化文本以显示在TextBlock中?

感谢您的任何建议......

1 个答案:

答案 0 :(得分:0)

我尝试在aViewModel中创建InlineCollection属性,然后在xaml中设置绑定,但TextBlock中的InlineCollection不可绑定,因为它不是DependencyProperty。答案to this question显示创建自己的控件并使其成为DependencyProperty,这是一个不错的解决方法。

VM:

private InlineCollection inlineCollection;

 public InlineCollection TextBlockInlineCollection {
    get
    {
        return inlineCollection;
    }
    set
    {
        inlineCollection = value;
        NotifyPropertyChanged("TextBlockInlineCollection");
    }
}

XAML: //不起作用     

您还可以使用XamlReader在代码中动态创建TextBlock: 例如:

   string textBlock = @"<TextBlock xmlns='http://schemas.microsoft.com/client/2007' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' x:Name='infoBarTextBlockWithFormatting' AutomationProperties.AutomationId='infoBarTextBlockWithFormatting' Margin='9,0,0,0' TextWrapping='Wrap'>";
   textBlock = String.Concat(textBlock, e.NewValue.ToString(), "</TextBlock>");
   infoBar.infoBarRunHolder.Child = (TextBlock)XamlReader.Load(textBlock);