Как заставить мой WPF ListView правильно связываться с моим списком, чтобы представление обновлялось при изменении данных? - PullRequest
0 голосов
/ 14 марта 2011

На сегодняшний день для каждого имеющегося у меня ListView я просто установил ItemSource = {Binding} в моем Xaml, а затем в файле .CS я говорю listview.datacontext = myobject, и представление загружается просто отлично.Но теперь мне нужно иметь список, который обновляется по мере обновления данных.Поэтому после некоторого исследования я обнаружил ObservableCollections и переписал свой код, чтобы использовать его.Но я не могу отобразить мои данные при настройке списка для моего объекта данных.

Мой Xaml:

            <ListView ItemsSource="{Binding Tests}" Name="DataCompareTests" Margin="0,0,5,0" Grid.Column="0">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="TestCase" Width="200" DisplayMemberBinding="{Binding name}" />
                    </GridView>
                </ListView.View>
            </ListView>

Мой Xaml.cs:

readonly DataCompare dataCompare = new DataCompare();

public void Execute_Click(object sender, RoutedEventArgs e)
    {

        var Tests = new ObservableCollection<TestCases>();
        Tests = dataCompare.LoadTestCases();  //located in another class file
        //DataCompareTests.DataContext = Tests;
    }

Если я удаляю часть привязки «Тесты» в моем Xaml и удаляю комментарии из строки .DataContext выше, представление отображает правильную информацию.Однако я предполагаю, что если я хочу, чтобы мое представление обновлялось как данные, мне нужно указать свой объект в привязке.Как мне правильно установить это?Кажется, я не могу найти правильный ответ.

Спасибо,

Джейсон

Ответы [ 2 ]

2 голосов
/ 14 марта 2011

Я думаю, вам нужно немного лучше познакомиться с привязками и объектно-ориентированным программированием в целом.

Если вы установите ваш datacontext для вашего объекта модели, ".Tests" должен быть публичным свойством этой модели.объект.Кроме того, не делайте этого:

var someVariable = new SomeClassThatTakesWorkToConstruct();
someVarialbe = someOtherVariable.SomeMethod();

То, что вы хотели сделать, было так: var someVariable = someOtherVariable.SomeMethod ();

Это по двум причинам 1) Выне тратить впустую конструкцию ObservableCollection.2) Ваш код будет легче реорганизовать (тип, возвращаемый SomeMethod, может измениться без необходимости изменять ваше объявление someVariable).

Редактировать, дополнительные ресурсы:

Обзор привязки данных У вас есть указанный путь, но нет источника для указанной привязки.

Статья MVVM Отличная статья об использовании общего шаблона MVFM WPF, поможет вамсохраняйте объектный код ориентированным, чистым и т. д. даже при сложном взаимодействии пользовательского интерфейса.

0 голосов
/ 14 марта 2011

Казалось бы, мои опасения были бессмысленными, и я, во-первых, делал все правильно.

Согласно MSDN:

"Однако, если вы привязываетесь к объекту, который уже был создан, вам нужно установить> DataContext в коде, как в следующем примере. ... myListBox.DataContext = myDataSet; "

Мой объект уже был создан, и я установил DataContext в коде. Все, что мне нужно было сделать, это оставить ListView ItemSource как {Binding}, и каждый раз, когда я добавлялся в объект Tests, список обновлялся ..

Не могу поверить, что провел целый день, сомневаясь, что я делал это правильно, не двигаясь вперед, чтобы проверить. : -)

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