绑定到UWP ComboBox时无法设置ViewModel属性

在UWP / Template10应用程序中,我们有一个绑定到ViewModel属性的组合框。 ViewModel属性的值在OnNavigatedToAsync中设置。 如果我们删除了ComboBox绑定,ViewModel中的属性被适当设置。 但是,如果ComboBox绑定到该属性,则ViewModel属性将保留为空。

XAML看起来像这样

<ComboBox 
    Name="JobTypeComboBox" 
    ItemsSource="{x:Bind JobViewModel.JobTypes}" 
    SelectedItem="{x:Bind JobViewModel.JobType,Mode=TwoWay,Converter={StaticResource ChangeTypeConverter}}"/>

ViewModel看起来像这样

JobType _JobType = default(JobType);
public JobType JobType { get { return _JobType; } set { Set(ref _JobType, value); } }
public ObservableCollection<JobType> JobTypes = new ObservableCollection<JobType>(JobTypeService.GetJobTypes());

public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary<string, object> state)
    {
            this.JobType = job.JobType;

编辑1:转换器看起来像这样

public class ChangeTypeConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (targetType.IsConstructedGenericType && targetType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
        {
            if (value == null)
            {
                return null;
            }
            targetType = Nullable.GetUnderlyingType(targetType);
        }

        if (value == null && targetType.GetTypeInfo().IsValueType)
            return Activator.CreateInstance(targetType);

        if (targetType.IsInstanceOfType(value))
            return value;

        return System.Convert.ChangeType(value, targetType);
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return Convert(value, targetType, parameter, language);
    }
}

在执行该行this.JobType = job.JobType; 有6个电话给转换器:

用JobType的正确值调用Convert并返回正确的值。

使用value = null调用ConvertBack并返回null;

使用value = null调用Convert并返回null;

使用value = null调用Convert并返回null;

使用value = null调用ConvertBack并返回null;

使用value = null调用Convert并返回null;

因此,它看起来像绑定弹起的价值回到ConvertBack为空。

Job.JobType被正确返回。 如果绑定已从JobTypeComboBox删除,则this.jobType设置正确。 当绑定被添加到JobTypeComboBoxthis.JobType保持为空。

JobTypeComboBox绑定到它时,如何设置this.jobType的值?


那么,使用这个视图模型:

public class MainPageViewModel : ViewModelBase
{
    public MainPageViewModel()
    {
        ComboBoxItem = ComboBoxItems.First();
    }

    string _ComboBoxItem = default(string);
    public string ComboBoxItem { get { return _ComboBoxItem; } set { Set(ref _ComboBoxItem, value); } }

    public ObservableCollection<string> ComboBoxItems { get; } = new ObservableCollection<string>(new[] { "1", "2", "3", "4" });
}

而这个XAML:

<ComboBox x:Name="testComboBox"
            ItemsSource="{Binding ComboBoxItems}"
            RelativePanel.AlignLeftWith="parameterResizer"
            RelativePanel.Below="stateTextBox"
            SelectedItem="{Binding ComboBoxItem, Mode=TwoWay}" />

<TextBlock x:Name="testTextBlock"
            RelativePanel.AlignLeftWith="parameterResizer"
            RelativePanel.Below="testComboBox"
            Text="{Binding ComboBoxItem}" />

我得到了这个发生:

在这里输入图像描述

感谢您使用Template 10 - 尽管我认为这与T10无关。 :-)

链接地址: http://www.djcxy.com/p/44683.html

上一篇: Unable to set ViewModel property when bound to UWP ComboBox

下一篇: Bind flag enums to a control and back to the enum property