ComboBox(Previous DataContext) SelectedItem property set as null value in UWP?

夙愿已清 提交于 2019-12-11 17:54:42

问题


Initially, ComboBox DataContext is set with Profession1 and SelectedValue as Politician. At Runtime, i changed the Datacontext to Profession2. Doing this is changing the Profession1 to null.

Please refer the below code:

<Page.Resources>
    <local:MainPageViewModel x:Key="datacontent"></local:MainPageViewModel>
</Page.Resources>

<ComboBox x:Name="comboBox"
    ItemsSource="{Binding Professions,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
    SelectedItem="{Binding Profession, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
    Width="100"
    Height="100"                              
    VerticalAlignment="Center"
    HorizontalAlignment="Stretch" />

Code Behind:

var datacontent = (this.Resources["datacontent"] as MainPageViewModel);
this.comboBox.DataContext = datacontent.Profession1;

Model:

public class MainPageViewModel
{       
    public MainPageViewModel()
    {
        Profession1 = new Person();        
        Profession2 = new Person();
    }
    private Person profession1;

    public Person Profession1
    {
        get { return profession1; }
        set { this.profession1 = value; }
    }

    private Person profession2;

    public Person Profession2
    {
        get { return profession2; }
        set { this.profession2 = value; }
    }
}

public class Person : INotifyPropertyChanged
{       
    public Person()
    {
        _professions = new List<string>();
        _professions.Add("Lawyer");
        _professions.Add("Politician");
        _professions.Add("Other");
    }

    private string _profession;
    public string Profession
    {
        get
        {
            if (string.IsNullOrWhiteSpace(_profession))
            {
                // _profession = _professions.LastOrDefault();
            }
            return _profession;
        }
        set
        {
            if (_profession != value)
            {
                _profession = value;
                NotifyPropertyChanged("Profession");
            }
        }
    }      

    private List<string> _professions;

    public List<string> Professions
    {
        get
        {
            return _professions;
        }
    }
}

I have used the below code, to check the previous datacontext (Profession1->Professon) value .

Code

((this.Resources["datacontent"] as MainPageViewModel).Profession1 as Person).Profession 

Output is : null. Expected value : Politician

Please someone suggest on this.


回答1:


((this.Resources["datacontent"] as MainPageViewModel).Profession1 as Person).Profession

Output is : null. Expected value : Politician Please someone suggest on this.

The problem is that when you modify the DataContext of combobox, the DataContext is set null first and then turns to Profession2. So the Profession property of Profession1 will be set null. For your requirement, you could set the judgment condition to solve this issue.

public string Profession
{
    get
    {

        return _profession;
    }
    set
    {
        if (_profession != value && value != null)
        {
            _profession = value;
            OnPropertyChange();
        }
    }
}


来源:https://stackoverflow.com/questions/46112424/comboboxprevious-datacontext-selecteditem-property-set-as-null-value-in-uwp

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!