`<run>`在设计时没有数据绑定

时间:2015-05-18 10:38:51

标签: xaml windows-phone-8.1 reactiveui

我有一个继承自reactiveui.netReactiveObject的视图模型,类似于

public sealed class TestViewModel : ReactiveObject
{
    public sealed class NestedViewModel
    {
        private string _property;
        public string VMProperty
        {
            get { return _property; }
            set { this.RaiseAndSetIfChanged(ref _property, value); }
        }

        private string _suffix;
        public string Suffic
        {
            get { return _suffix; }
            set { this.RaiseAndSetIfChanged(ref _suffix, value); }
        }

    }

    private NestedViewModel _nested = new NestedViewModel();
    public Nested
    {
        get { return _nested; }¨
        set { this.RaiseAndSetIfChanged(ref _nested, value); }
    }

#if DEBUG
    public TestViewModel() {
        Nested.VMProperty = "Test string";
        Nested.Suffix = "with suffix";
    }
#endif
}

我可以得到以下内容来显示设计时和运行时:

 <Page.DataContext>
     <local:TestViewModel />
 </Page.DataContext>

 <TextBlock Text="{Binding Nested.VMProperty}" />
 <TextBlock Text="{Binding Nested.Suffix}" />

但是当我尝试这样做时,设计时没有显示文字:

 <Page.DataContext><!-- ... -->

 <TextBlock>
     <Run Text="{Binding Nested.VMProperty}" />
     <Run Text="{Binding Nested.Suffix}" />
 </TextBlock>

运行时它仍然有效,但我不想每次想要检查一些像素推送时都要部署到设备模拟器......

如何在设计时在<Run />标记内显示这些属性?

2 个答案:

答案 0 :(得分:2)

ReactiveUI框架的创建者Paul Betts提倡将样本数据硬编码到Page XAML中:

<TextBlock>
 <Run Text="Test String" x:Name="VMproperty" />
 <Run Text="with suffix" x:Name="Suffix" />
</TextBlock>

然后您可以在页面代码后面进行绑定:

this.OneWayBind(ViewModel, vm => vm.VMproperty, v => v.VMproperty.Text);
this.OneWayBind(ViewModel, vm => vm.Suffix, v => v.Suffix.Text);

这些ReactiveUI样式绑定会覆盖在XAML中硬编码的示例数据。因此,您可以在设计时获取样本数据,并在运行时获取数据绑定。

来源:https://groups.google.com/d/msg/reactivexaml/GrVHWm8tUuM/4EAxOsxc_LQJ

答案 1 :(得分:1)

如何在绑定中使用FallbackValue?我经常使用它来检查绑定内容的外观和没有任何问题。