Как привязать список объектов к сетке данных инфраструктуры? - PullRequest
0 голосов
/ 22 января 2010

Довольно простая задача, но исходный код не выполняет требуемую работу ... Пожалуйста, сообщите.

В классе есть коллекция Products (подход основан на шаблоне MVVm, но это не влияет на текущую проблему):

public class ProductWindowViewModel : WorkspaceViewModel // implements INotifyPropertyChanged
{
    public ProductWindowViewModel()
    {
        Products = new List<Product>(ProductService.Instance.Repository.GetAll());
    }

    List<Product> Products { get; set; }
}

Вот объявление класса:

public class Product : IEntity
{
    #region Public Properties

    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public int Cost { get; set; }

    #endregion
}

Экземпляр класса привязан к контексту данных Grid окна:

ProductWindow wnd = new ProductWindow();
wnd.MainGrid.DataContext = new ProductWindowViewModel();
wnd.ShowDialog();

А вот код окна xaml:

<Window x:Class="WpfTest1.ProductWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ProductWindow" Height="300" Width="300" xmlns:igDP="http://infragistics.com/DataPresenter" 
xmlns:ViewModel="clr-namespace:ViewModel;assembly=ViewModel">

<Grid x:Name="MainGrid">
    <Grid.Resources>
        <ObjectDataProvider x:Key="odpObjectDataProvider" ObjectType="{x:Type ViewModel:ProductWindowViewModel}" />
    </Grid.Resources>
    <Grid DataContext="{StaticResource odpObjectDataProvider}">
        <igDP:XamDataGrid DataSource="{Binding Path=Products}"/>
    </Grid>
</Grid>

xamDataGrid sampe такой же. Общий код довольно прост, но не работает.

Кто-нибудь знает почему? Любые мысли приветствуются.

Как можно отладить привязку для решения проблемы himselft?

Спасибо.

Ответы [ 2 ]

1 голос
/ 26 января 2010

Хорошо, возможно, это не совсем ответит на ваш вопрос, но похоже, что вы дважды создаете экземпляр своего класса viewmodel. Однажды в вашем коде, сразу после создания вашего окна, и один раз в вещи ObjectDataProvider. Вероятно, будет легче отлаживать, если вы остановитесь на одном из них. Предложение:
1. Закомментируйте эту строку: wnd.MainGrid.DataContext = new ProductWindowViewModel();
2. Установите точку останова внутри конструктора вашей модели представления 3. Запустите его и посмотрите, будет ли достигнута точка останова. Если это получит удар, вы знаете, что делаете что-то правильно.

Кроме того, проверьте окно вывода в Visual Studio и посмотрите, нет ли там каких-либо исключений привязки.

0 голосов
/ 28 января 2010

В моем случае код в конструкторе Windows является избыточным. Теперь все работает, похоже, что удаление ненужных назначений решило проблему.

...