在選擇ComboBox
中的任何項目之前,其SelectedItem
爲空,並且ComboBox
本身在視覺上爲空白。一旦選擇了某項內容,用戶似乎沒有任何方法選擇「缺少選擇」(儘管可以通過在代碼中將SelectedItem
設置爲null來完成)。更新UserControl中的ItemsControl(組合框)中的SelectedItem
我的組合框綁定到我的對象的ObservableCollections。我不想在每個ObservableCollection的前面添加一個「特殊的」第一個類似於null的對象。所以我藉此機會學習了一些關於編寫UserControl的內容。
問題是SelectedItem
無法正常工作。也就是說,ComboBox
很好地支持ObservableCollection
,但從ComboBox
中挑選某些內容不會更新它應該綁定到的SelectedItem
。
我覺得我需要將某些信息從UserControl中的ComboBox傳遞到...某處。我在正確的軌道上嗎?我應該用Google搜索什麼?
C#:
public partial class ClearableComboBox : UserControl
{
public ClearableComboBox()
{
InitializeComponent();
}
public IEnumerable ItemsSource
{
get { return (IEnumerable)base.GetValue(ItemsSourceProperty); }
set { base.SetValue(ItemsSourceProperty, value); }
}
public static readonly DependencyProperty ItemsSourceProperty =
DependencyProperty.Register("ItemsSource",
typeof(IEnumerable),
typeof(ClearableComboBox));
public object SelectedItem
{
get { return (object)base.GetValue(SelectedItemProperty); }
set { base.SetValue(SelectedItemProperty, value); }
}
public static readonly DependencyProperty SelectedItemProperty =
DependencyProperty.Register("SelectedItem",
typeof(object),
typeof(ClearableComboBox));
public string DisplayMemberPath
{
get { return (string)base.GetValue(DisplayMemberPathProperty); }
set { base.SetValue(DisplayMemberPathProperty, value); }
}
public static readonly DependencyProperty DisplayMemberPathProperty =
DependencyProperty.Register("DisplayMemberPath",
typeof(string),
typeof(ClearableComboBox));
private void Button_Click(object sender, RoutedEventArgs e)
{
comboBox.SelectedItem = null;
}
}
XAML:
<UserControl x:Class="MyProj.ClearableComboBox"
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"
x:Name="root">
<DockPanel>
<Button DockPanel.Dock="Left" Click="Button_Click" ToolTip="Clear">
<Image Source="pack://application:,,,/img/icons/silk/cross.png" Stretch="None" />
</Button>
<ComboBox
Name="comboBox"
ItemsSource="{Binding ElementName=root, Path=ItemsSource}"
SelectedItem="{Binding ElementName=root, Path=SelectedItem}"
DisplayMemberPath="{Binding ElementName=root, Path=DisplayMemberPath}" />
</DockPanel>
</UserControl>
用法:
<wpfControl:ClearableComboBox ItemsSource="{Binding Path=Things}"
DisplayMemberPath="SomeProperty"
SelectedItem="{Binding Path=SelectedThing}" />
// Picking a Thing doesn't update SelectedThing :(
你會如何建議我通過鼠標點擊清除我的ClearableComboBox? – epalm
我用自定義控件更新了我的答案。如有任何問題,請查看並告訴我。 –
當我使用' '它充滿了Foos,但是當我從中選擇Foo時,SelectedFoo不會更新下拉。 –
epalm