自定义导航组合框控件

时间:2013-07-16 21:43:33

标签: .net wpf xaml wpf-controls

我正在尝试使用前进和后退按钮构建一个自定义组合框我开始使用,并且我无法使用通用列表填充组合框。

到目前为止,我有这个:

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”的字符串属性,它将成为显示字段。

enter image description here

0 个答案:

没有答案