2016-01-20 4 views
1

Я занимаюсь разработкой приложения WPF с MVVM шаблон проектирования, в моем первом окне я хочу, чтобы отобразить DataGrid, созданный с помощью выбранного текста в текстовом поле This is a preview of what i want to doBind DataTable к Datagrid в WPF MVVM во время выполнения

В моей модели ViewModel я реализовал метод, который заполняет datatable с помощью 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

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

Кажется, вы забыли уведомлять об изменениях. Покажите, как определяется ** свойство ** 'TblData2'. Он должен быть свойством, и он должен вызывать 'PropertyChanged' в setter. – Sinatr

+0

Что такое 'TblData2'? – StepUp

ответ

3

Попробуйте ввести следующий код в ViewModel.

1.Add ObservableCollection собственности со всеми выбранными текстами

ObservableCollection<string> _SelectedTexts; 

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

public YourViewModelConstructor 
{ 

    SelectedTexts = new ObservableCollection<string>(); 
} 

2.Add выделенный текст в ObservableCollection

public void AddSelectedText(string selectedText) 
{ 

    SelectedTexts.Add(selectedText); 


} 

3.xaml связывания данных

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

Я не проверял весь код но привязка ItemsSource к некоторому свойству и затем изменение этого свойства во время выполнения не будет работать, вам придется использовать ObservableCollection. Надеюсь, поможет.

Смежные вопросы