2016-08-22 69 views
0

我想將數據網格中的所有文本框綁定到字符串列表。我不知道怎麼做。 我有文本框在數據網格中的一列:將數據網格中的所有文本框綁定到字符串列表

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

在視圖模型:

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屬性仍爲空。

感謝

+0

您需要將'DataList'爲''Type'裏面string'''DataObject' Data'。這就是'ViewModel'暗示的名字。 – Gopichandar

回答

0

試試這個:

<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

+0

謝謝。只是爲了澄清,這個例子加入值從文本框列表或從列表到文本框..我需要這個: TextBox1 TextBox2 TextBox3 我想從文本框綁定值列表。列表示例: 列表 data = new List (){TextBox1Value,TextBox2Value,TextBox3Value}。每個文本框將成爲一個列表中的一個元素。謝謝 – bluray

相關問題