2013-03-28 46 views
1

我想我要過濾條列條碼。 在這個列中,我有一個轉換器來轉換字符串中的Eans列表。類是這樣的:Datagrid過濾列與文本框,caliburn.micro

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

我能做些什麼?謝謝..

回答

1

從View我會建議你使用DataGridTemplateColumn開始,Specifally的CellTemplate,讓您可以將自己的自定義控制,例如有組合框。從那裏,你應該再是cusomtize什麼控制你需要在你的類綁定起來

下面

<DataGrid.Columns> 
    <DataGridTemplateColumn Header="Bar Codes"> 
     <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <ComboBox ItemsSource="{Binding Ean, Converter={StaticResource EanListToString}}"></ComboBox> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
    </DataGridTemplateColumn> 
     ... 
1

粗糙例如使用DataGridTemplateColumn用具有過濾文本框輸入一個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 

型號

public class Filter:INotifyPropertyChanged//Todo implement interface 
{ 
    private string name; 
    public string Name 
    { 
     get{return name;} 
     set{name = value; OnPropertyChanged("Name");} 
    } 
} 
+0

爲什麼它不工作?! (Delay = 200時出現錯誤) – puti26

+0

Remove Delay = 200。它的.Net框架4.5 –

+0

好吧,但給我這個錯誤:「雙向綁定需要Path或XPath。」 – puti26