假設我們有一個DataSource綁定到來自數據庫的集合。當然沒有空項目。如何將void項添加到組合框中,以便在第一次加載用戶時會看到一個空字符串。我不想在集合中添加一個虛擬/無效對象。 最好在XAML。任何建議?與空項目的組合框?
28
A
回答
36
<ComboBox Name="myComboBox" Width="200" Background="White">
<ComboBox.ItemsSource>
<CompositeCollection>
<ComboBoxItem IsEnabled="False" Foreground="Black">Select Item</ComboBoxItem>
<CollectionContainer Collection="{Binding Source={StaticResource DataKey}}" />
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
編輯
正如在評論中提及@surfen,BindingProxy是綁定問題
+0
好的。但如何使第一個項目不可選?只能選擇數據源項目。 – 2009-07-27 14:31:15
2
<UserControl.Resources>
<CollectionViewSource x:Key="Modules" Source="{Binding Path=Modules}" />
</UserControl.Resources>
<abv:ComboBox SelectedIndex="0" IsNullable="True"
SelectedItem="{Binding Path=SelectedModule, Mode=TwoWay}">
<abv:ComboBox.ItemsSource>
<CompositeCollection>
<ComboBoxItem Content="{DynamicResource EmptyModuleComboBox}"/>
<CollectionContainer Collection="{Binding Source={StaticResource Modules}}" />
</CompositeCollection>
</abv:ComboBox.ItemsSource>
</abv:ComboBox>
public class ComboBox : System.Windows.Controls.ComboBox
{
public static readonly DependencyProperty IsNullableProperty =
DependencyProperty.Register("IsNullable", typeof(bool), typeof(ComboBox));
public bool IsNullable
{
get { return (bool)GetValue(IsNullableProperty); }
set { SetValue(IsNullableProperty, value); }
}
public ComboBox()
{
Loaded += ComboBox_Loaded;
}
void ComboBox_Loaded(object sender, RoutedEventArgs e)
{
if (IsNullable)
{
this.ItemContainerStyle = new Style();
this.ItemContainerStyle.Setters.Add(new EventSetter()
{
Event = ComboBoxItem.PreviewMouseUpEvent,
Handler = new MouseButtonEventHandler(cmbItem_PreviewMouseUp)
});
}
}
public void cmbItem_PreviewMouseUp(object sender, MouseButtonEventArgs e)
{
if (Items.IndexOf(sender as ComboBoxItem) == 0)
{
SelectedItem = null;
}
}
}
1
變通方法MVVM對象綁定:
<ComboBox Name="cbbFiltres" SelectedItem="{Binding ElmtInfo, Mode=TwoWay}" Height="26" MinWidth="90" SelectedIndex="0" SelectedValuePath="Id">
<ComboBox.Resources>
<CollectionViewSource x:Key="cvsFiltres" Source="{Binding Elmts.items}"/>
</ComboBox.Resources>
<ComboBox.ItemsSource>
<CompositeCollection>
<model:tblFiltreChamps Desc="{x:Static resx:resMain.enumAucun}" Id="0"/>
<CollectionContainer Collection="{Binding Source={StaticResource cvsFiltres}}" />
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
而對於綁定上:
<Label Visibility="{Binding Path=SelectedValue, ElementName=cbbFiltres, Converter={StaticResource NullToVisibility}}" />
和通用轉換器:
public class ConvNullToVisibility : IValueConverter {
/// <summary>Convertisseur pour le Get.</summary>
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
if (DesignerProperties.GetIsInDesignMode(new DependencyObject())) return Visibility.Visible; // Pour annuler l'effet dans le designer: http://stackoverflow.com/questions/33401900/wpf-detect-design-mode-in-a-converter
return ((value == null) || (string.IsNullOrEmpty(value.ToString())) || (value.ToString() == "0")) ? Visibility.Collapsed : Visibility.Visible;
}
/// <summary>Convertisseur inverse, pour le Set (Binding).</summary>
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
if (value is Visibility) {
return (((Visibility)value) == Visibility.Visible) ? true : false;
} else return false;
}
}
只是重要聲明SelectedValuePath在組合框中。 :-)
0
相關問題
- 1. Silverlight的組合框空項目高度
- 2. 組合框具有組合框項目和子項目
- 3. Databound WPF組合框與'新...'項目
- 4. 隱藏ID與組合框項目?
- 5. 填充組合框與數據庫,從空白項目
- 6. 組合框的項目爲空時爲空嗎?
- 7. 組合框項目重疊
- 8. 組合框項目預覽
- 9. 組合框項目左
- 10. 拆箱組合框項目
- 11. 填充組合框項目
- 12. 組合框選擇項目
- 13. 添加組合框項目
- 14. 組合框項目選擇與未知項目索引
- 15. C# - 比較組合框和列表項目的組合框
- 16. 組合框內的項目出現在組合框外
- 17. 從其他組合框的選定項目填充組合框
- 18. 消除組合框中的空條目
- 19. 組合框/列表框選定項目
- 20. 在組合框中分組項目
- 21. Excel vba組合框 - 項目名稱後面的空格
- 22. 在DevExpress中選擇空值的項目與數據源組合框
- 23. C#根據其他組合框添加項目到組合框
- 24. 從組合框中移除組合框項目WPF
- 25. C#:wpf將組合框項目添加到多個組合框
- 26. 刪除組合框lwuit中的項目?
- 27. 組合框顯示項目的升序
- 28. WPF DataTrigger的組合框項目更改
- 29. 組合框項目中的pyqt圖像
- 30. 新項目的組合框默認值
當心,所提供的解決方案不具有結合工作。 – Cartesius00 2011-05-23 19:00:05
我找到了解決綁定問題的方法,請參閱此帖:http://stackoverflow.com/questions/6446699/how-do-you-bind-a-collectioncontainer-to-a-collection-in-a-view-model – Frinavale 2011-06-23 15:59:45