2011-06-16 58 views
4

结合为了在ListView显示的数据表我有WPF在代码

<ListView ItemsSource="{Binding Source={StaticResource AdministrationView}}" IsSynchronizedWithCurrentItem="True" Name="lvTable">     
    <ListView.ItemContainerStyle> ... stuff ... </ListView.ItemContainerStyle> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="Pattern"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <TextBox Text="{Binding Path=Pattern}" /> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       <GridViewColumn Header="Account"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <TextBox Text="{Binding Path=AccountName}" /> 
    .... closing tags ....... 

与资源

<Window.Resources>  
    <CollectionViewSource x:Key="AdministrationView"/> 
</Window.Resources> 

和代码后面

var db = new XDataContext(); 
var data = db.Translations; 
var viewSource = (CollectionViewSource)FindResource("AdministrationView"); 
viewSource.Source = data; 

=====

现在,如果我想显示一个se veral可能的表,我想在代码绑定,所以我有

data = .... 
var tb = new TextBox(); 
var binding = new Binding("Pattern"); 
binding.Source = db.Accounts; 
tb.SetBinding(TextBlock.TextProperty, binding); 

,但我无法弄清楚如何将文本框连接到GridViewColumn(一个或多个)之一。

有什么想法?

谢谢

回答

3

这里是一个动态genration解决方案,我发现在互联网上,它工作的很棒。

public class MyListView : ListView { 
public MyListView() { 
    ItemsSourceProperty.AddOwner(typeof(MyListView), new FrameworkPropertyMetadata(null, OnItemsSourcePropertyChanged)); 
} 

private static void OnItemsSourcePropertyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e) { 
    if (e.OldValue != e.NewValue && e.NewValue != null) { 
    var lv = (MyListView)dependencyObject; 
    var gridView = new GridView(); 
    lv.View = gridView; 
    gridView.AllowsColumnReorder = true; 
    var properties = lv.DataType.GetProperties(); 
    foreach (var pi in properties) { 
     var binding = new Binding {Path = new PropertyPath(pi.Name), Mode = BindingMode.OneWay}; 
     var gridViewColumn = new GridViewColumn() {Header = pi.Name, DisplayMemberBinding = binding}; 
     gridView.Columns.Add(gridViewColumn); 
    } 
    } 
} 

public Type DataType { get; set; } 
} 


<local:MyListView x:Name="listView" DataType="{x:Type dbTranslationsType}" 
        ItemsSource="{Binding Source={StaticResource AdministrationView}}"> 

希望这有助于