2012-06-14 6 views
0

Это мой первый опыт работы с WPAT datagrid. Из того, что я понимаю, я должен привязать сетку к публичной собственности в моей модели просмотра. Ниже приведен код ViewModel, когда я перехожу через отладчик. GridInventory получает значение List, содержащий 2606 записей, однако эти записи никогда не отображаются в datagrid. Что я делаю не так?WPF привязка списка к DataGrid

public class ShellViewModel : PropertyChangedBase, IShell 
{ 
    private List<ComputerRecord> _gridInventory; 

    public List<ComputerRecord> GridInventory 
    { 
     get { return _gridInventory; } 
     set { _gridInventory = value; } 
    } 

    public void Select() 
    { 
     var builder = new SqlConnectionBuilder(); 
     using (var db = new DataContext(builder.GetConnectionObject(_serverName, _dbName))) 
     { 
      var record = db.GetTable<ComputerRecord>().OrderBy(r => r.ComputerName);     
      GridInventory = record.ToList(); 
     } 
    } 
} 

Мой XAML является

<Window x:Class="Viewer.Views.ShellView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="InventoryViewer" Height="647" Width="1032" WindowStartupLocation="CenterScreen"> 
<Grid> 
    <DataGrid x:Name="GridInventory" ItemsSource="{Binding GridInventory}"></DataGrid> 
    <Button x:Name="Select" Content="Select" Height="40" Margin="600,530,0,0" Width="100" /> 
</Grid> 
</Window> 

ответ

2

я думаю, вам нужно позвонить raisepropertychanged событие в вашей GridInventory сеттер, так что представление может получить уведомление.

public List<ComputerRecord> GridInventory 
{ 
    get { return _gridInventory; } 
    set 
    { _gridInventory = value; 
     RaisePropertyChanged("GridInventory"); 
    } 
} 
+0

Спасибо, теперь набор данных отлично обновляется. – bzsparks

0

Информационный документ страницы не привязан к экземпляру модели просмотра. В коде позади после вызова InitializeComponent, назначить DataContext, такие как:

InitializeComponent(); 

DataContext = new ShellViewModel(); 
0

Я думаю, вы должны использовать RaisePropertyChanged в ViewModel и модели, а также должны установить DataContext в представлении.

<Window.DataContext>  
    <local:ShellViewModel />  
</Window.DataContext> 
0

Возможно, вы захотите рассмотреть возможность привязки ObservableCollection к datagrid. Тогда вам не нужно поддерживать частного участника _gridInventory и публичное имущество GridInventory

//viewModel.cs 
public ObservableCollection<ComputerRecord> GridInventory {get; private set;} 
//view.xaml 
<DataGrid ... ItemsSource="{Binding GridInventory}" .../> 
Смежные вопросы