C# 比较字符串列表和布尔值列表
目前,我这样做是为了设置这么多布尔属性的可见性。我想要一个通用的方法来获取布尔属性列表和字符串列表,然后根据列表中是否存在特定字符串返回布尔列表C# 比较字符串列表和布尔值列表,c#,.net,wpf,mvvm,C#,.net,Wpf,Mvvm,目前,我这样做是为了设置这么多布尔属性的可见性。我想要一个通用的方法来获取布尔属性列表和字符串列表,然后根据列表中是否存在特定字符串返回布尔列表 private void UpdateColumns(object c) { if (c == null) return; var cols = ((IEnumerable)c).Cast<string>().ToList(); IsName
private void UpdateColumns(object c)
{
if (c == null)
return;
var cols = ((IEnumerable)c).Cast<string>().ToList();
IsName = cols.Contains("Name") ? true : false;
IsStatus = cols.Contains("Status") ? true : false;
IsSize = cols.Contains("Size") ? true : false;
IsHeight = cols.Contains("Height") ? true : false;
IsWidth = cols.Contains("Width") ? true : false;
IsImageType = cols.Contains("Image Type") ? true : false;
IsFileName = cols.Contains("File Name") ? true : false;
IsCreationDate = cols.Contains("Creation Date") ? true : false;
IsEffectiveDate = cols.Contains("Effective Date") ? true : false;
IsEndDate = cols.Contains("End Date") ? true : false;
IsDescription = cols.Contains("Description") ? true : false;
}
不确定如何使用bool控制可见性。但带参数的转换器可能会有所帮助
public class ViewModel
{
public ViewModel()
{
Columns = new List<string>
{
"Width", "Height"
};
}
public List<string> Columns { get; private set; }
}
public class CustomizedConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
List<string> list = value as List<string>;
string keyword = parameter as string;
return list.Contains(keyword);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
<StackPanel>
<TextBox Text="Width" IsEnabled="{Binding Columns, Converter={StaticResource CustomizedConverter}, ConverterParameter='Width'}" />
<TextBox Text="Height" IsEnabled="{Binding Columns, Converter={StaticResource CustomizedConverter}, ConverterParameter='Height'}" />
<TextBox Text="None" IsEnabled="{Binding Columns, Converter={StaticResource CustomizedConverter}, ConverterParameter='None'}" />
</StackPanel>
请先读这个。欢迎来到Stackoverflow。这不适合这里。到目前为止你有试过什么吗?先表现出你的努力,这样人们才能表现出他们的努力。请阅读并显示一些代码。还不清楚您试图实现什么以及您面临什么问题返回myStringList.ContainssampleString;对不起,我解释不清楚。实际上,我已经在视图模型中使用带有布尔属性的代理绑定绑定了datagrid每个列的可见性。在datagrid上下文菜单中,我绑定了打开列选择对话框的命令。在用户选择列之后,我得到所选列名称的字符串列表。因此,如果列表中存在特定的列名,我想设置布尔属性的值。请帮助我,因为我是mvvm的新手。Jason Li Thanx很多。这对我来说很有用,我已经定制了这个转换器来设置列的可见性
Yes thats works for me . Thanx a lot. I have created the converter to set the visibility of the columns
public class ColumnVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
List<string> list = value as List<string>;
string colName = parameter as string;
var visibility = list.Contains(colName) ? Visibility.Visible : Visibility.Collapsed;
return visibility;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
and in xaml i have binded like this
<DataGridTextColumn Header="Name" MinWidth="200" Binding="{Binding Name}" CanUserResize="True" Visibility="{Binding Data.Columns,Source={StaticResource proxy},Converter={StaticResource ColumnVisibilityConverter}, ConverterParameter='Name'}"/>
<DataGridTextColumn Header="Status" Binding="{Binding Status}" MinWidth="140" CanUserResize="True" Visibility="{Binding Data.Columns,Source={StaticResource proxy},Converter={StaticResource ColumnVisibilityConverter}, ConverterParameter='Status'}" />
<DataGridTextColumn Header="File Name" Binding="{Binding FileName}" MinWidth="150" CanUserResize="True" Visibility="{Binding Data.Columns,Source={StaticResource proxy},Converter={StaticResource ColumnVisibilityConverter}, ConverterParameter='File Name'}" />
<DataGridTextColumn Header="Size" Binding="{Binding ImgSize}" MinWidth="100" CanUserResize="True" Visibility="{Binding Data.Columns,Source={StaticResource proxy},Converter={StaticResource ColumnVisibilityConverter}, ConverterParameter='Size'}" />
<DataGridTextColumn Header="Height" Binding="{Binding Height}" MinWidth="100" CanUserResize="True" Visibility="{Binding Data.Columns,Source={StaticResource proxy},Converter={StaticResource ColumnVisibilityConverter}, ConverterParameter='Height'}" />
<DataGridTextColumn Header="Width" Binding="{Binding Width}" MinWidth="100" CanUserResize="True" Visibility="{Binding Data.Columns,Source={StaticResource proxy},Converter={StaticResource ColumnVisibilityConverter}, ConverterParameter='Width'}" />
and in view model i have updated the columns according to the selecting list
private void UpdateColumns(object c)
{
if (c == null)
return;
var cols = ((IEnumerable)c).Cast<string>().ToList();
Columns.Clear();
Columns.AddRange(cols);
RaisePropertyChanged(() => Columns);
}