`<Run/">` не поддерживает привязку во время разработки

У меня есть модель представления, которая наследует от ReactiveObject от reactiveui.net, что-то вроде

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 /> во время разработки?

Ответ 1

Пол Беттс (Paul Betts), создатель инфраструктуры ReactiveUI, защищает образцы данных жесткого кодирования на странице 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

Ответ 2

Как насчет использования FallbackValue в вашей привязке? Я часто использую его для проверки того, как будет выглядеть связанный контент, и у него не было никаких проблем.