我正在尝试为WPF做一个"空列表到可见性转换器".这是一个IValueConverter,它接受一个对象(应该是一个列表),如果列表为空(或者如果传递的对象为null),它应返回Visibility.Collapsed; 如果列表不为空,则应返回Visibility.Visibile;
我打算将它用于数据网格.计划是每当给予ItemsSource的列表是空列表或null时,使datagrid不可见(折叠).
<my:DataGrid
Name="dataGridAuxiliaryTools"
Style="{StaticResource DataGridStyle}"
CellStyle="{StaticResource DataGridCellStyle}"
ColumnHeaderStyle="{StaticResource DataGridColumnHeaderStyle}"
ItemsSource="{Binding Path=Items}"
IsReadOnly="False"
Visibility="{Binding Path=Items,
Converter={StaticResource emptyListToVisibilityConverter}}"
</my:DataGrid>
Run Code Online (Sandbox Code Playgroud)
我写了EmptyListToVisibilityConverter如下:
public class EmptyListToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture)
{
if (value == null)
{
return Visibility.Collapsed;
}
else if (value is IList<Object>)
{
if ((value as IList<Object>).Count == 0)
{
return Visibility.Collapsed;
}
else
{
return Visibility.Visible;
}
}
else
{
return Visibility.Visible;
}
}
public object ConvertBack(object value, Type targetType, object parameter,
CultureInfo culture)
{
throw new NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)
当Items被赋予null时,这种方法很有效但是当Item作为List给出时它不起作用...我认为代码如下:不正确,无法检测"value"是否是列表...任何提示?
if (value is IList<Object>)
{
if ((value as IList<Object>).Count == 0)
{
return Visibility.Collapsed;
}
else
{
return Visibility.Visible;
}
Run Code Online (Sandbox Code Playgroud)
关于如何做到这一点的任何提示?
小智 7
您不能将列表转换为IList <Object>,但可以将其强制转换为ICollection,然后使用ICollection.Count:请参阅http://devw.wordpress.com/2011/07/18/empty-list-visibility -转换器/
public class EmptyListVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return Visibility.Collapsed;
else
{
ICollection list = value as ICollection;
if (list != null)
{
if (list.Count == 0)
return Visibility.Collapsed;
else
return Visibility.Visible;
}
else
return Visibility.Visible;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
<ListBox x:Name=”NameChoiceListBox”
ItemsSource=”{Binding NamesList}”
SelectedItem=”{Binding SelectedName, Mode=TwoWay}”
ItemTemplate=”{StaticResource DataTemplateNameChoice}”
Visibility=”{Binding NamesList, Converter={StaticResource EmptyListVisibilityConverter}}”>
Run Code Online (Sandbox Code Playgroud)
小智 5
我认为这很简单,你看:
public class NullOrEmptyCollectionToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null) return Visibility.Collapsed;
var collection = value as ICollection;
return collection != null ? (collection.Count == 0 ? Visibility.Collapsed : Visibility.Visible) : Visibility.Visible;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
希望能有所帮助,谢谢!- 沙姆斯
| 归档时间: |
|
| 查看次数: |
5776 次 |
| 最近记录: |