提问人:PuddleJumper1357 提问时间:11/16/2023 更新时间:11/17/2023 访问量:37
ComboBox SelectedItem 值绑定不会设置为 null 以外的任何值
ComboBox SelectedItem value binding will not set to anything other than null
问:
我正在尝试创建一个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# 中定义了 ComboBoxItems,并且此方法在那里起作用。
答:
0赞
PuddleJumper1357
11/17/2023
#1
谢谢 Klaus Gütter 和 emoacht 在评论中,我能够将 ComboBoxItem 更改为字符串,这使我能够运行代码并为我提供预期的正确输出。
评论
ComboBoxItem MySelectedItem
string MySelectedItem