Хитрость здесь в том, чтобы использовать Поведение . Вы создаете пользовательский класс, который наследуется от абстрактного класса Behavior. Когда свойство ItemsSource изменяется в ComboBox с привязкой, оно вызывает метод OnAttached () вашего класса поведения.
Если вы используете xaml:
<Window //Your window property here
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity">
<ComboBox x:Name="PropertyComboBox" ItemsSource="{Binding Path=Voornaam}" Width="140" >
<i:Interaction.Behaviors>
<local:HideComboxBehavior/>
</i:Interaction.Behaviors>
</ComboBox>
или, если вы предпочитаете код позади:
using System.Windows.Interactivity;
[...]
Interaction.GetBehaviors(myCombobox).Add(new HideComboxBehavior());
Создать пользовательский класс: HideComboxBehavior.cs
using System.Windows.Controls;
using System.Windows.Interactivity;
[...]
public class HideComboxBehavior : Behavior<ComboBox>
{
protected override void OnAttached()
{
if (AssociatedObject.Items == null || AssociatedObject.Items == 0)
AssociatedObject.Visibility = System.Windows.Visibility.Hidden;
}
}
Если скрытый ComboBox все еще имеет место на вашем макете, и вы не хотите его использовать, используйте вместо него Visibility.Collapsed
AssociatedObject.Visibility = System.Windows.Visibility.Collapsed;
Это чистое решение и дружественный MVVM. Это позволяет избежать создания переменной, связанной со свойством ComboxBox Visibility.