Одним из возможных способов заключается в использовании конвертер для привязки к SomeDataSource
тоже:
public class IsNullConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (parameter == null)
return value == null;
else
return value != null;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
#endregion
}
Затем, вы можете использовать его в XAML только:
<Window.Resources>
<l:IsNullConverter x:Key="IsNullConverter"/>
</Window.Resources>
<Expander IsExpanded="{Binding SomeDataSource, Converter={StaticResource IsNullConverter}, ConverterParameter=SomeData}">
<DataGrid ItemsSource="{Binding SomeDataSource}">
<!-- some sode -->
</DataGrid>
</Expander>
EDIT
Если никаких проблем в вашем случае, вы также можете привязать к свойству DataGrid.HasItems
. Он определяет, есть ли элементы в списке источников. Но он также разрушает Expander, когда источник не содержит элементов, но это не null
(источник - пустой список).
<Expander IsExpanded="{Binding HasItems, ElementName=dg, Mode=OneWay}">
<DataGrid Name="dg" ItemsSource="{Binding SomeDataSource}">
<!-- some sode -->
</DataGrid>
</Expander>
Используйте преобразователь в раскрываемый связывания –
Вместо HasData, вы могли бы, вероятно, связать со свойством HasItems в DataGrid и использовать преобразователь, как было предложено выше – failedprogramming
@failedprogramming Что разница? – Will