WPF代码中的绑定

4
为了在ListView中显示数据表,我需要:
<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;

现在,如果我想要显示多个可能的表格中的一个,我想要在代码中进行绑定,所以我有以下代码:
data = ....
var tb = new TextBox();
var binding = new Binding("Pattern");
binding.Source = db.Accounts;
tb.SetBinding(TextBlock.TextProperty, binding);

但我不知道如何将文本框附加到GridViewColumn之一。有什么想法吗?谢谢。
1个回答

3

我在互联网上找到了一个动态生成解决方案,它非常好用。

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

希望这可以帮助您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接