Допустим, у меня есть это перечисление
public enum LogType
{
None = 0,
File = 1,
Folder = 2
}
Я имею в виду этот ComboBox
<ComboBox Name="CustomLogLogType" FontSize="10"
MinHeight="20" Height="20" SelectedItem="{Binding LogType}">
Тогда ViewModel, как это так
public class CustomLogRuleItemViewModel : ReactiveObject
{
[Reactive]
public LogType LogType { get; set; } = LogType.File;
public List<LogType> LogTypes => Enum.GetValues(typeof(LogType)).Cast<LogType>().Where(_ => _ != LogType.None).ToList();
}
Затем в коде для представления
public partial class CustomLogRuleItemView : ReactiveUserControl<CustomLogRuleItemViewModel>
{
public CustomLogRuleItemView()
{
InitializeComponent();
this.ViewModel = new CustomLogRuleItemViewModel();
this.DataContext = this.ViewModel;
//The below works
//CustomLogLogType.ItemsSource = this.ViewModel.LogTypes;
this.WhenActivated(
disposables =>
{
//If I use below it will error with exception
this.OneWayBind(this.ViewModel,
_ => _.LogTypes, _ => _.CustomLogLogType.ItemsSource)
.DisposeWith(disposables);
});
}
}
В основном, если я связываюсь с ниже, это работает
CustomLogLogType.ItemsSource = this.ViewModel.LogTypes;
Но если я попытаюсь использовать ReactiveUI для привязки, как показано ниже
this.OneWayBind(this.ViewModel,
_ => _.LogTypes, _ => _.CustomLogLogType.ItemsSource)
.DisposeWith(disposables);
Я получаю исключение, утверждающее, что LogType для ReactiveUI.IViewFor нарушает ограничение типа 'T'. Неуверенный, почему я бы получить что-то споря о IViewFor как раз имеет отношение к реализации ViewModel для зрения.