Невозможно отобразить записи в DataGrid - PullRequest
1 голос
/ 30 октября 2011

Я новичок в WPF, и у меня возникают проблемы с отображением моей записи. Кажется, что мои записи "застенчивы", когда дело доходит до их отображения, хотя у меня уже есть все мои записи.

Код для моего App.xaml.cs:

    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        Window1 window = new Window1();
        var viewModel = new Window1ViewModel();        

        window.PHGrid.ItemsSource = viewModel.ViewModels;
        window.Show();
    }

Код для Window1ViewModel:

public class Window1ViewModel : ViewModelBase
{
    private readonly DAPHContrib _contribRepository;
    private ObservableCollection<ViewModelBase> _viewModelBases;

    public ObservableCollection<ViewModelBase> ViewModels
    {
        get
        {
            if (_viewModelBases == null)
            {
                _viewModelBases = new ObservableCollection<ViewModelBase>();
            }
            return _viewModelBases;
        }
    }

    public Window1ViewModel()
    {
        _contribRepository = new DAPHContrib();
        //Create instance of our view model to add it in our collection

        PHContribViewModel viewModel = new PHContribViewModel(_contribRepository);
        ViewModels.Add(viewModel);
    }
}

Вот мой Window1.xaml ОБНОВЛЕНО :

<Window x:Class="Wabby_App.Views.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:vm="clr-namespace:Wabby_App.ViewModels" 
    xmlns:v="clr-namespace:Wabby_App.Views" 
    Title="Utos ng mahal ko" 
    Height="300" 
    Width="300">

<Grid>
    <DataGrid 
        AutoGenerateColumns="True" 
        Height="200" 
        HorizontalAlignment="Center" 
        Name="PHGrid" 
        VerticalAlignment="Center" 
        Width="200"
        ItemsSource="{Binding ViewModels}"/>

</Grid>

Выход:

My records are

Надеюсь, вы поможете мне с этим.

Ответы [ 2 ]

1 голос
/ 31 октября 2011

на основе ваших комментариев у вас есть коллекция моделей (ObservableCollection<ViewModelBase>)

и внутри каждого из этих базовых экземпляров модели представления (PHContribViewModel) у вас есть другая коллекция ObservableCollection<PHContrib_Entity>.

Следовательно, у вас есть два уровня вложенных коллекций и одна сетка данных для сопоставления. Это не будет работать как есть. Для этого вам нужно сгладить эту двухуровневую иерархию коллекций в один список типа ObservableCollection<PHContrib_Entity>.

Используйте LINQ, чтобы сделать это ...

 protected override void OnStartup(StartupEventArgs e) {
    base.OnStartup(e);
    Window1 window = new Window1();
    var viewModel = new Window1ViewModel();
    window.PHGrid.ItemsSource
     = viewModel.ViewModels.SelectMany(vm => vm.PHContribEntities).ToList();
    window.Show();
} 

Дайте мне знать, если это поможет ...

1 голос
/ 30 октября 2011

Ваш View (Window1) не привязан к ViewModel, он просто устанавливает для ItemsSource элемента управления свойство ViewModel, что является неправильным способом реализации MVVM. Что вам нужно сделать, это установить DataContext для Window1 в экземпляр ViewModel (привязать View к ViewModel). Итак, вам нужно обновить код в методе OnStartup.

от

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    Window1 window = new Window1();
    var viewModel = new Window1ViewModel();        

    window.PHGrid.ItemsSource = viewModel.ViewModels;
    window.Show();
}

до

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    Window1 window = new Window1();
    var viewModel = new Window1ViewModel();        

    window.DataContext = viewModel;
    window.Show();
}

Обновление

Вам также необходимо установить свойство ItemsSource для datagrid в свойство во ViewModel

<DataGrid ItemsSource={Binding ViewModels} ..
...