1

バーコード列にフィルターを作成したいと思います。この列には、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

ビューから始めて、ComboBox などの独自のカスタム コントロールをそこに配置できるように、 DataGridTemplateColumn、具体的にはCellTemplateを使用することから始めることをお勧めします。そこから、必要なコントロールをカスタマイズし、クラスにバインドする必要があります

以下大まかな例

 <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 に答える