组合框SelectedItem = null与DisplayMemberPath
在WPF组合框中,如何在使用DisplayMemberPath时选择ItemsSource中的空实例?
我绑定到一组对象,并向该集合添加了null。 我还将SelectedItem绑定到属性。 选择非空值时,我的SelectedItem属性正确更改 。 但是,当我从下拉列表中选择空项目时,我的SelectedItem属性不会更改 。
我已经将它隔离到DisplayMemberPath的使用,即它不会发生与字符串集合,因为您不会使用DisplayMemberPath。
这对我来说很有意义,因为没有DisplayMemberPath为空或null的我的对象实例,List中只有一个空项目。 但是,我试图找到最好的方式来提供一个方法将ComboBox清空。
我想我可以创建一个我的对象的实例,其中DisplayMemberPath属性的值是一个空白字符串,但这对我来说似乎有点冒险。
有什么建议么?
我的例子如下:
这里是我填充ItemsSource的类:
public class Car
{
public string Make { get; set; }
public Car(string make)
{
Make = make;
}
}
这是我的xaml:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ComboBox SelectedItem="{Binding MyCar}" ItemsSource="{Binding MyCars}" DisplayMemberPath="Make" />
</Grid>
这里是我的代码:
public partial class MainWindow : Window, INotifyPropertyChanged
{
private Car myCar = null;
public List<Car> MyCars { get; set; }
public Car MyCar
{
get { return myCar; }
set
{
if (myCar != value)
{
myCar = value;
OnPropertyChanged("MyCar");
}
}
}
public MainWindow()
{
MyCar = null;
MyCars = new List<Car>();
MyCars.Add(null);
MyCars.Add(new Car("Ford"));
MyCars.Add(new Car("Chevy"));
MyCars.Add(new Car("Toyota"));
InitializeComponent();
}
#region INotifyPropertyChanged
/// <summary>
/// Occurs when a property value changes.
/// </summary>
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// This function is used to raise an PropertyChanged event.
/// </summary>
/// <param name="prop">The name of the property whose value changed.</param>
internal void OnPropertyChanged(string prop)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(prop));
}
}
#endregion
}
添加(在VB中,所以你需要转换)a
Public Overrides Function ToString() As String
If string.isnullorwhitespace(Make) then
return "no Car"
else
return make
end if
End Function
到你的汽车类,那么就不需要使用displaymemberpath,看看它是否像一个字符串的itemsource
private string[] Logo_menu_array = { "Assets/star-6-48.ico", "/Assets/note-48.ico", "/Assets/medal-48.ico", "/Assets/joystick-48.ico" };
private string[] Text_menu_array={"Phổ biến trên YouTuBe","Âm nhạc","Thể thao","Trò chơi"};
public class listboxitem
{
public string textmenu { get; set; }
public string logomenu { get; set; }
}
public List<listboxitem> Load_Menu()
{
List<listboxitem> text = new List<listboxitem>();
for (int i = 0; i < Math.Min(Logo_menu_array.Length, Text_menu_array.Length); i++)
{
var l = new listboxitem();
l.logomenu = Logo_menu_array[i];
l.textmenu = Text_menu_array[i];
text.Add(l);
}
return text;
}
public MainPage()
{
this.InitializeComponent();
//get menu
List<listboxitem> menu_list = Load_Menu();
lst_menu.ItemsSource = menu_list;
}
链接地址: http://www.djcxy.com/p/41265.html
上一篇: ComboBox SelectedItem = null with DisplayMemberPath
下一篇: ComboBox takes way too long to open (COMException Error)