RX: ComboBox пуст, если привязка к списку <string>| ViewModelViewHost не может найти допустимое представление для модели представления - PullRequest
0 голосов
/ 24 апреля 2019

В ViewModel входит

public List<string> OperationModes { get; } = Enum.GetNames(typeof(EOperationMode)).ToList();

, который я хотел бы связать с ComboBox.

реактивный путь | не работает

this.OneWayBind(ViewModel, model => model.OperationModes, window => window.ComboBoxOperationMode.ItemsSource).DisposeWith(r);

enter image description here

Если использовать reactiveUI для привязки list к ComboBox, я получаю следующую ошибку в console output.

консольный вывод

DefaultViewLocator: Failed to resolve view for view model type 'System.Object'.
DefaultViewLocator: Failed to resolve view for view model type 'System.Object'.
ViewModelViewHost: The ViewModelViewHost could not find a valid view for the view model of type System.String and value Passthrough.

xaml way | работает

<ComboBox
    x:Name="ComboBoxOperationMode"
    ItemsSource="{Binding ViewModel.OperationModes}"/>

enter image description here

Как я могу решить эту проблему? Или невозможно связать list<string> через reactiveUI?


Github Issue: https://github.com/reactiveui/ReactiveUI/issues/2008

Ответы [ 2 ]

4 голосов
/ 24 апреля 2019

Установите DisplayMemberPath свойство ComboBox, чтобы избежать использования ViewModelViewHost, который пытается разрешить представление для string:

<ComboBox x:Name="ComboBoxOperationMode" DisplayMemberPath="." />
0 голосов
/ 24 апреля 2019

Поскольку ваш список доступен только для чтения, вы можете просто назначить ItemsSource напрямую, без использования OneWayBind (либо через код, либо через xaml, как у вас уже есть).Привязка ReactiveUI является мощной, но она требует затрат, поэтому, если вы можете избежать прямых назначений, сделайте это.И даже если ваш список со временем меняется, вы все равно можете избежать привязки ReactiveUI с помощью ObservableCollection, а не списка.

...