2015-08-31 2 views
1

Я пишу приложение C# WPF. Я новичок в этом и попытался загрузить List в DataGrid и не смог. Затем я добавил WinForm в свое WPF-решение с помощью DataGridView. , когда я загрузил список в DataGridView.DataSource У меня не было строки '*' для добавления новой строки, даже если свойство AllowUserToAddRows имеет значение True, я преобразовал List в BindingList и все еще есть новая строка. Я искал везде, но все говорят, что BindingList решил им проблему. Это потому, что его WinForm в приложении WPF? Как это исправить?Невозможно добавить строку в DataGridView с BindingList

+2

Вы проверили свойство readonly в datagridview? –

+3

, пожалуйста, укажите соответствующий код – WiiMaxx

+0

Забудьте winforms. Отправьте соответствующий код и XAML. –

ответ

0

Сфокусируйтесь на использовании WPF, плагин winforms работает, но из-за идиосинкразии процесса это действительно не оптимально.


Вот основной пример, который я создал, который связывается с общим массивом списков. Вы можете использовать ObservableCollection или простой общий список. В WPF в первую очередь определяется внешний вид в xaml, а затем привязывается к данным. ItemsSource - это стандартный способ получения элементов в отображаемый файл данных.

Window.Resources> 
    <model:People x:Key="People"> 
     <model:Person First="Joe" Last="Smith" Phone="303-555 5555" /> 
     <model:Person First="Mary" Last="Johnson" Phone="720-555 5555" /> 
     <model:Person First="Frank" Last="Wright" Phone="202-555 5555" /> 
    </model:People> 
</Window.Resources> 
<DataGrid AutoGenerateColumns="False" 
      ItemsSource="{StaticResource People}"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="First" Binding="{Binding First}" /> 
     <DataGridTextColumn Header="The Name" Binding="{Binding Last}" /> 
     <DataGridTextColumn Header="Phone Number" Binding="{Binding Phone}"/> 
    </DataGrid.Columns> 
    <DataGrid.RowDetailsTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Phone}" /> 
     </DataTemplate> 
    </DataGrid.RowDetailsTemplate> 
</DataGrid> 

В результате список с шаблоном строк, который открывается на клик:

WPF DataGrid

Теперь, скорее всего, вы не будете использовать статический ресурс, определенный в Xaml связываться с так же, как у меня есть вместо этого один экземпляр класса VM (ViewModel), который реализует INotifyPropertyChanged и создает Люди.

ВМ можно получить из контекста данных страницы после того, как он, скорее всего, конкретизируется в коде позади таких как

public MyPage() 
{ 
    InitializeComponent(); 
    DataContext = new MyPageViewModel(); // Contains logic for the 'People' Property of a list of people. 

} 

}

Тогда один изменяет связывание в моем примере выше, чтобы связываться с page datacontext , который был проиндексирован со страницы, потому что ничего не было установлено для элемента управления datagrid.

<DataGrid AutoGenerateColumns="False" 
      ItemsSource="{Binding People}"> 

Полный пример MVVM см мой блог Xaml: ViewModel Main Page Instantiation and Loading Strategy for Easier Binding

0

Ok Я установил его, конструктор по умолчанию привязки объекта не была публичной. И по пути я получил его, чтобы связать с WPF DataGrid с ItemsSource (что странно, когда я пробовал его, прежде чем у меня были заголовки столбцов и строки в количестве элементов в списке, но нет данных в строках .. но если он работает, не прикасайтесь к нему :)) Спасибо всем.

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