MasterDetails проблема загрузки по требованию - PullRequest
0 голосов
/ 24 мая 2010

В качестве упражнения для изучения wpf и понимания того, как работает привязка, у меня есть пример, который работает. Однако когда я пытаюсь загрузить по требованию, у меня ничего не получается.

У меня в основном 3 класса Country-City-Hotels

Если я загружаю ВСЕ за один раз, все это работает, если я загружаю по требованию, оно терпит неудачу. Что я делаю не так?

Работает

        <Window x:Class="MasterDetailCollectionViewSource.CountryCityHotelWindow"
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                Title="CountryCityHotelWindow" Height="300" Width="450">
            <Window.Resources>
                <CollectionViewSource Source="{Binding}" x:Key="cvsCountryList"/>
                <CollectionViewSource Source="{Binding Source={StaticResource cvsCountryList},Path=Cities}" x:Key="cvsCityList"/>
                <CollectionViewSource Source="{Binding Source={StaticResource cvsCityList},Path=Hotels}" x:Key="cvsHotelList"/>
            </Window.Resources>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition/>
                </Grid.RowDefinitions>
                <TextBlock Grid.Column="0" Grid.Row="0" Text="Countries"/>
                <TextBlock Grid.Column="1" Grid.Row="0" Text="Cities"/>
                <TextBlock Grid.Column="2" Grid.Row="0" Text="Hotels"/>

                <ListBox Grid.Column="0" Grid.Row="1" Name="lstCountries" ItemsSource="{Binding Source={StaticResource cvsCountryList}}" DisplayMemberPath="Name" SelectionChanged="OnSelectionChanged"/>
                <ListBox Grid.Column="1" Grid.Row="1" Name="lstCities" ItemsSource="{Binding Source={StaticResource cvsCityList}}" DisplayMemberPath="Name" SelectionChanged="OnSelectionChanged"/>
                <ListBox Grid.Column="2" Grid.Row="1" Name="lstHotels" ItemsSource="{Binding Source={StaticResource cvsHotelList}}" DisplayMemberPath="Name" SelectionChanged="OnSelectionChanged"/>
            </Grid>
        </Window>

НЕ РАБОТАЕТ

Xaml такой же, как и выше, однако я добавил следующее, которое выбирает вещи по требованию. Он загружает страны только в отличие от другой, где он загружает все сразу, и не требуется код позади.

    public CountryCityHotelWindow()
    {
        InitializeComponent();

        //Load only country Initially
        lstCountries.ItemsSource=Repository.GetCountries();
        DataContext = lstCountries;
    }

    private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var lstBox = (ListBox)e.OriginalSource;
        switch (lstBox.Name)
        {
            case "lstCountries":
                var country = lstBox.SelectedItem as Country;
                if (country == null) return;
                lstCities.ItemsSource = Repository.GetCities(country.Name);
                break;
            case "lstCities":
                var city = lstBox.SelectedItem as City;
                if (city == null) return;
                lstHotels.ItemsSource = Repository.GetHotels(city.Name);
                break;
            case "lstHotels":
                break;
        }
    }

Что я делаю не так? Спасибо

1 Ответ

1 голос
/ 24 мая 2010

Только что понял, что заставило все это работать! Я пропал без вести

IsSynchronizedWithCurrentItem = "True"

Теперь это работает так, как предполагалось.

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