1

我想对 Bar Codes 列进行过滤。在本专栏中,我有一个转换器来转换字符串中的 Eans 列表。课程是这样的:

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();
    }
}

所以我希望如果用户在TEXTBOX(或其他东西)中写一个条形码,它将过滤 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");
      }
   }

我可以做什么?谢谢..

4

2 回答 2

1

从视图开始,我建议您从使用DataGridTemplateColumn开始,特别是CellTemplate,这样您就可以在其中放置自己的自定义控件,例如 ComboBox。然后,您应该从那里自定义您需要的控件并将其绑定在您的班级中

下面的粗略示例

 <DataGrid.Columns>
    <DataGridTemplateColumn Header="Bar Codes">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <ComboBox ItemsSource="{Binding Ean, Converter={StaticResource EanListToString}}"></ComboBox>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
        ...
于 2013-03-28T16:19:32.283 回答
1

使用带有用于过滤的 TextBox 输入的 HeaderTemplate 的 DataGridTemplateColumn。

<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

模型

public class Filter:INotifyPropertyChanged//Todo implement interface
{
   private string name;
   public string Name 
   {
      get{return name;}
      set{name = value; OnPropertyChanged("Name");}
   }
}
于 2013-03-28T16:36:37.937 回答