2016-01-20 140 views
1

我發展與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

回答

3

嘗試在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}"/> 
1

我沒有檢查所有的代碼但將ItemsSource綁定到某個屬性,然後在運行時更改該屬性將不起作用,則必須使用ObservableCollection。希望能幫助到你。