XAML ComboBox SelectedItem值绑定不会设置为null以外的任何值

hk8txs48  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(132)

我正在尝试创建一个MVVM程序。当一个单选按钮被按下时,它会关闭其他单选按钮,并根据按下的单选按钮将组合框的内容更改为不同的值。然后它会使用所选的值来设置一个字符串。我遇到的问题是,绑定到SelectedItem的值始终为null,并抛出错误。我如何解决这个问题?
作为一个方面,而不是组合框正确显示整个列表,所以ItemsSource的绑定工作正常,SelectedIndex也正确更新,只有SelectedItem似乎没有正确绑定。
现在我正在考虑使用selectedindex,我可以使用该值从适当的字符串列表中选择,但我想知道发生了什么,为什么我不能使用SelectedItem,以及是否有一种方法可以使用SelectedItem。
下面的代码希望是我的代码中发生的事情的简化版本,我希望我没有错过任何东西。
XAML

<RadioButton Grid.Column="0" Content="List1" IsChecked="{Binding Path=TypeList1, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<RadioButton Grid.Column="1" Content="List2" IsChecked="{Binding Path=TypeList2, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<RadioButton Grid.Column="2" Content="List3" IsChecked="{Binding Path=TypeList3, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>

<ComboBox Margin="5" 
          ItemsSource="{Binding Path=MySource}"
          SelectedItem="{Binding Path=MySelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
          SelectedIndex="{Binding Path=MySelectedIndex,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
          />

字符串
C#语言

Class MyClass
{
    private list<string> _listType;
    private list<string> _mySource;
    private bool _typeList1;
    private bool _typeList2;
    private bool _typeList3;
    private ComboBoxItem _mySelectedItem;
    private int _mySelectedIndex;
    
    public list<string> ListType
    {
        get{ return _listType;}
        set{ _listType=value; OnPropertyChanged(nameof(ListType));
    }

    public bool TypeList1
    {
        get{return _typeList1;}
        set
        {
            _typeList1=value; 
            OnPropertyChanged(nameof(TypeList1));
            if(value==true)
            {
                MySource=List1;
                TypeList2=false;
                TypeList3=false;
            }   
        }
    }
    public bool TypeList2
    {
        get{return _typeList2;}
        set
        {
            _typeList2=value; 
            OnPropertyChanged(nameof(TypeList2));
            if(value==true)
            {
                MySource=List2;
                TypeList1=false;
                TypeList3=false;
            }   
        }
    }
    public bool TypeList3
    {
        get{return _typeList3;}
        set
        {
            _typeList3=value; 
            OnPropertyChanged(nameof(TypeList3));
            if(value==true)
            {
                MySource=List3;
                TypeList2=false;
                TypeList1=false;
            }   
        }
    }
    
    public list<string> MySource
    {
        get{ return _mySource;}
        set{ _mySource=value; OnPropertyChanged(nameof(MySource));
    }
    public ComboBoxItem MySelectedItem
    {
        get{ return _mySelectedItem;}
        set{ _mySelectedItem=value; OnPropertyChanged(nameof(MySelectedItem));
    }

    public int MySelectedIndex
    {
        get{ return _mySelectedIndex;}
        set{_mySelectedIndex=value; OnPropertyChanged(nameof(MySelectedIndex));
    }

    public List<string> List1=new List<string> {"List1Val1", "List1Val2", "List1Val3",};
    public List<string> List2=new List<string> {"List2Val1", "List2Val2", "List2Val3","List2Val4"};
    public List<string> List3=new List<string> {"List3Val1", "List3Val2", "List3Val3",};
    
    public MyClass()
    {
        MySource= new List<string>();
        ListType= new List<string>();
    }
    
    public void MyFunction()
    {
        string mySelectedValueFromComboBox= MySelectedItem.content.ToString();// where the error happens when the code is run.
    }
}


发生的错误是:System.NullReferenceException:“对象引用未设置为对象的示例”。
FileName.mySelectedValueFromComboBox.get返回null。
我所期望的是MyFunction中的字符串值被设置为所选ComboBoxItem的字符串值。
在我代码的另一部分,我在XAML中而不是在C#中定义了ComboBoxItem,这个方法在那里工作。

50few1ms

50few1ms1#

感谢Klaus Gütter和emoacht在评论中,我能够将ComboBoxItem更改为字符串,这使我能够运行代码并给予我预期的正确输出。

相关问题