我正在尝试使用前进和后退按钮构建一个自定义组合框我开始使用,并且我无法使用通用列表填充组合框。
到目前为止,我有这个:public partial class NavigableComboBox:UserControl,INotifyPropertyChanged {
#region Constructor
public NavigableComboBox()
{
InitializeComponent();
}
#endregion
#region Dependency Properties
#region ListSource
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public ObservableCollection<object> ListSource
{
get
{
return (ObservableCollection<object>)GetValue(ListSourceProperty);
}
set
{
base.SetValue(NavigableComboBox.ListSourceProperty, value);
NotifyPropertyChanged("ListSource");
}
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible")]
public static DependencyProperty ListSourceProperty = DependencyProperty.Register(
"ListSource",
typeof(ObservableCollection<object>),
typeof(NavigableComboBox),
new PropertyMetadata(OnValueChanged));
#endregion
#region ListSource
public object SelectedItem
{
get
{
return (object)GetValue(SelectedItemProperty);
}
set
{
base.SetValue(NavigableComboBox.SelectedItemProperty, value);
NotifyPropertyChanged("SelectedItem");
}
}
public static DependencyProperty SelectedItemProperty = DependencyProperty.Register(
"SelectedItem",
typeof(object),
typeof(NavigableComboBox),
new PropertyMetadata(OnValueChanged));
#endregion
#endregion
private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((NavigableComboBox)d).ListSource = (ObservableCollection<object>)e.NewValue;
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
这适用于xaml:
<UserControl x:Class="Divestco.WinPics.Components.Common.UserControls.NavigableComboBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Divestco.WinPics.Components.Common.UserControls"
mc:Ignorable="d"
d:DesignHeight="55" d:DesignWidth="200">
<Grid>
<ComboBox Name="comboBox1" ItemsSource="{Binding ListSource}" SelectedItem="{Binding SelectedItem}" />
</Grid>
</UserControl>
我在主窗体上使用它:
<UserControls:NavigableComboBox ListSource="{Binding Path=MapModel.GridsInProject}" SelectedItem="{Binding Path=MapModel.SelectedGrid}"/>
我在依赖属性上放置了断点但它们永远不会被击中。当使用常规组合框而不是我的自定义控件时,它会出现问题所以我知道主窗体绑定是正确的。运行
时,我也没有收到任何错误消息有谁知道我做错了什么?甚至更好的是有人知道像这样的预先控制?
我设想的控件将在两侧都有一个组合框和下一个上一个按钮。用户可以从下拉列表中选择一个项目,也可以按下一个或上一个滚动浏览。控件应该能够采用任何自定义对象集合,并允许您选择显示字段。例如,我有一组网格对象和一组地平线对象,我将根据应用程序中的其他因素使用其中一个填充控件。两个集合都有一个名为“Name”的字符串属性,它将成为显示字段。