【问题标题】:Binding all Texboxes in datagrid to list of string将数据网格中的所有 Texbox 绑定到字符串列表
【发布时间】:2016-08-22 11:43:03
【问题描述】:

我想将数据网格中的所有文本框绑定到字符串列表。我不知道怎么做。 我在一列数据网格中有文本框:

<DataGrid ItemsSource="{Binding Data}">
  <DataGridTextColumn Binding="{Binding Title}" Header="Title" IsReadOnly="True">
DataGridTemplateColumn>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox Width="60" Text="{Binding DataList, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"></TextBox>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
</DataGridTextColumn>
</DataGrid>

在 ViewModel 中:

    public ObservableCollection<DataObject> Data //datasource
    {
        get { return _data;}
        set { _data = value; OnPropertyChanged(nameof(Data)); }
    }

    public ObservableCollection<string> DataList //here must be data from textboxes
    {
        get { return _dataList; }
        set { _dataList = value; OnPropertyChanged(nameof(DataList)); }
    }

为简单起见,我没有在这里写命令调用。命令的实际操作方法是 DataList 属性仍然为空。

谢谢

【问题讨论】:

  • 您需要将DataList 移动为DataType stringDataObject。这就是ViewModel 这个名字的含义。

标签: wpf datagrid


【解决方案1】:

试试这个:

<DataGrid ItemsSource="{Binding Data}" AutoGenerateColumns="False">
    <DataGrid.Resources>
        <local:CollectionToStringConverter x:Key="CollectionToStringConverter"/>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Title" IsReadOnly="True">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding DataContext.DataList,Converter={StaticResource CollectionToStringConverter},RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

编写将字符串集合转换为单个字符串的转换器。

     [ValueConversion(typeof(List<string>), typeof(string))]
     public class CollectionToStringConverter : IValueConverter
     {

         public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
         {
             if (targetType != typeof(string))
                 throw new InvalidOperationException("The target must be a String");

             return String.Join(", ", ((IList<string>)value).ToArray());
         }

         public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
         {
             throw new NotImplementedException();
         }
     }
     }

感谢WPF textblock binding with List

【讨论】:

  • 谢谢。只是为了澄清起见,此示例将值从文本框连接到列表或从列表连接到文本框。我需要这个:TextBox1 TextBox2 TextBox3,我想将文本框中的值绑定到列表。列表示例:List data = new List() {TextBox1Value,TextBox2Value,TextBox3Value}。每个文本框将是列表中的一个元素。谢谢
猜你喜欢
  • 1970-01-01
  • 2019-08-29
  • 2012-06-13
  • 2017-11-03
  • 2016-04-30
  • 2012-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多