Wpf 带有文本框caliburn.micro的Datagrid筛选列
我想我想做一个过滤器列条码。 在本专栏中,我有一个转换器来转换字符串中的EAN列表。课程内容如下:Wpf 带有文本框caliburn.micro的Datagrid筛选列,wpf,datagrid,filter,filtering,caliburn.micro,Wpf,Datagrid,Filter,Filtering,Caliburn.micro,我想我想做一个过滤器列条码。 在本专栏中,我有一个转换器来转换字符串中的EAN列表。课程内容如下: public class EanListToStringConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return String.
public class EanListToStringConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
return String.Join("\r", ((List<Ean>)value).Select(ean => ean.Codice));
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
return NotSupportedException();
}
private object NotSupportedException()
{
throw new NotImplementedException();
}
}
公共类EANListToString转换器:IValueConverter
{
公共对象转换(对象值,类型targetType,
对象参数,CultureInfo(区域性)
{
返回字符串.Join(“\r”,((列表)值)。选择(ean=>ean.Codice));
}
公共对象转换回(对象值,类型targetType,
对象参数,CultureInfo(区域性)
{
return NotSupportedException();
}
私有对象NotSupportedException()
{
抛出新的NotImplementedException();
}
}
所以我想知道,如果用户在文本框中写一个条形码,它将过滤DataGrid列表
<DataGrid HorizontalAlignment="Stretch" SelectedItem="{Binding SelectedArticle}"
Margin="14,89,12,61" VerticalAlignment="Stretch" AutoGenerateColumns="False" x:Name="List">
<DataGrid.Columns>
<DataGridTextColumn Width="100" Binding="{Binding Code}" Header="Code" />
<DataGridTextColumn Width="300" Binding="{Binding Description}" Header="Description" />
<DataGridTextColumn Binding="{Binding Price}" Header="Price" />
<DataGridTextColumn Binding="{Binding Ean, Converter={StaticResource EanListToString}}" Header="Bar Codes" />
</DataGrid.Columns>
</DataGrid>
这是视图模型
[Export(typeof(IScreen))]
public class BViewModel : Screen
{
public List<Articolo> List { get; private set; }
public Article SelectedArticle { get; set; }
[Import]
WindowManager WindowManager = new WindowManager();
public BolleViewModel()
{
List = recover.GetArticles();
NotifyOfPropertyChange("List");
}
}
[导出(typeof(IScreen))]
公共类BViewModel:屏幕
{
公共列表{get;private set;}
公共项目选定的项目{get;set;}
[进口]
WindowManager WindowManager=新的WindowManager();
公共BolleViewModel()
{
List=recover.GetArticles();
财产变更通知(“清单”);
}
}
我能做什么?谢谢..从视图开始,我建议您首先使用DataGridTemplateColumn,特别是CellTemplate,以便您可以在其中放置自己的自定义控件,例如ComboBox。从那以后,您应该能够轻松地定义您需要的控件,并将其绑定到您的类中 下面是一个粗略的例子
<DataGrid.Columns>
<DataGridTemplateColumn Header="Bar Codes">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Ean, Converter={StaticResource EanListToString}}"></ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
...
...
使用带有HeaderTemplate的DataGridTemplate列,HeaderTemplate具有用于筛选的文本框输入
<DataGridTemplateColumn Width="80" SortMemberPath="Naam" Header="Naam">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<Grid>
<StackPanel Orientation="Vertical">
<TextBlock>Naam</TextBlock>
<TextBox Text="{Binding Delay=200, RelativeSource={RelativeSource AncestorType={x:Type UserControl }}, Path=DataContext.Filter.Naam, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>1
好的,但是告诉我这个错误:“双向绑定需要路径或XPath。”你能告诉我你正在使用的{binding..}和你绑定到的代码吗?绑定到的数据必须有一个getter和setter才能工作。
public class Filter:INotifyPropertyChanged//Todo implement interface
{
private string name;
public string Name
{
get{return name;}
set{name = value; OnPropertyChanged("Name");}
}
}