绑定到数据表中的Datagrid WPF MVVM在运行时

绑定到数据表中的Datagrid WPF MVVM在运行时

问题描述:

我发展与MVVM设计模式的WPF应用程序,在我的第一窗口,我想显示与文本框的选定文本创建一个DataGrid This is a preview of what i want to do绑定到数据表中的Datagrid WPF MVVM在运行时

在我的ViewModel中,我实现了一个使用selectedText填充数据表的方法,然后将其绑定到DataGrid,但My DataGrid不显示任何内容。 这是我的方法

void selectColumn(object parameter) 
{ 
    string selText = SelectedText; 
    if (i == 0) 
    { 
     var lines = File.ReadAllLines(TextProperty1); 
     datatable.Columns.Add("Column" + i + ""); 
     foreach (string line in lines) 
     { 
      DataRow newRow = datatable.NewRow(); 

      newRow["Column" + i + ""] = line.Substring(0, selText.Length); 

      datatable.Rows.Add(newRow) 
     } 
     i++; 
    } 
    else 
    { 

     datatable.Columns.Add("Column" + i + ""); 
     var lines = File.ReadAllLines(TextProperty1); 

     foreach (DataRow draw in datatable.Rows) 
     { 
      draw["Column" + i + ""] = lines[datatable.Rows.IndexOf(draw)].Substring(lines[2].IndexOf(selText), selText.Length); 
     } 

     TblData2 = datatable; 
     i++; 
    } 

    TblData2 = datatable; 
    TextProperty2 = TextProperty2.Remove(0, selText.Length); 
} 

,并在窗口我这是怎么结合的Datagrid

<TextBox x:Name="txt" Text="{Binding TextProperty2, UpdateSourceTrigger=PropertyChanged}"> 
     <i:Interaction.Behaviors> 
      <i:DependencyPropertyBehavior PropertyName="SelectedText" EventName="SelectionChanged" Binding="{Binding SelectedText, Mode=TwoWay}"/> 
     </i:Interaction.Behaviors> 
    </TextBox> 
    <Button x:Name="Tex" Content="Select Column" Command="{Binding SelectedColumnCommand}"/> 
    <DataGrid x:Name="DtGrid" ItemsSource="{Binding TblData2}"/> 

这是数据表

DataTable _dataTable2; 
    public DataTable TblData2 
    { 
     get { return _dataTable2; } 
     set 
     { 
      _dataTable2 = value; 
      RaisePropertyChanged("TblData"); 
     } 
    } 
+0

看来你忘了通知变化。显示如何定义** property **'TblData2'。它必须是属性,它必须在setter中调用“PropertyChanged”。 – Sinatr

+0

什么是'TblData2'? – StepUp

尝试在ViewModel中输入以下代码。

1.增加与所有选定的文本一个ObservableCollection财产

ObservableCollection<string> _SelectedTexts; 

public ObservableCollection<string> SelectedTexts 
{ 
    get { return _SelectedTexts; } 
    set 
    { 
     _SelectedTexts; = value; 
     RaisePropertyChanged("SelectedTexts"); 
    } 
} 

public YourViewModelConstructor 
{ 

    SelectedTexts = new ObservableCollection<string>(); 
} 

2.增加中的ObservableCollection所选文本

public void AddSelectedText(string selectedText) 
{ 

    SelectedTexts.Add(selectedText); 


} 

3.xaml数据绑定

<DataGrid x:Name="DtGrid" ItemsSource="{Binding SelectedTexts}"/> 

我没有检查所有的代码但将ItemsSource绑定到某个属性,然后在运行时更改该属性将不起作用,则必须使用ObservableCollection。希望能帮助到你。