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

Я использую шаблон MVVM.

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

ListBox для страны

 <pmControls:pmListBox  x:Name="countryListBox"  Grid.Row="1" Margin="3" ItemsSource="{Binding Countries}" SelectedItem="{Binding SelectedCountry,Mode=TwoWay}"  >
                <pmControls:pmListBox.ItemTemplate >
                    <DataTemplate >
                        <Button  Command="{Binding DataContext.GetAllStatesCommand,ElementName=countryListBox}"  Margin="3" Width="100" Height="25" Content="{Binding Title}" >                                            
                        </Button>

                    </DataTemplate>
                </pmControls:pmListBox.ItemTemplate>
            </pmControls:pmListBox>

ListBox для состояния

<pmControls:pmListBox x:Name="stateListBox" Grid.Row="1" Margin="3" ItemsSource="{Binding States}">

                    <pmControls:pmListBox.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding StateTitle}" ></TextBlock>
                        </DataTemplate>
                    </pmControls:pmListBox.ItemTemplate>
                </pmControls:pmListBox>

В ModelView это мои команды:

команда для получения всех стран:

public void getCountries()
{
    CountryServiceClient client = new CountryServiceClient();
client.GetCountryDetailsCompleted += (clientS, eventE) =>
{
    if (eventE.Error == null)
        {
        foreach (var item in eventE.Result)
        {
         countries.Add(item);
        }
    }
};
client.GetCountryDetailsAsync();

}

команда, чтобы получить все состояния для выбранной страны:

public void ExecutegetAllStatesCommand(EventToCommandArgs args)
{
    selectedState = new States();
    states = new ObservableCollection<States>();
            int cntry_id = this.SelectedCountry.Country_Id;

            StateServiceClient client = new StateServiceClient();
            client.GetStatesCompleted += (clientS, eventE) =>
            {
                if (eventE.Error == null)
                {
                    foreach (var item in eventE.Result)
                    {
                        states.Add(item);

                    }
                }
            };

        client.GetStatesAsync(cntry_id);
        }

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


person Gayatri    schedule 09.11.2012    source источник


Ответы (1)


Вы упомянули, что «состояния» правильно устанавливаются в модели представления, в этом случае проблема может быть одной из следующих:

  1. Я заметил, что вы привязываетесь к «Состояниям» (верхний регистр S), а ваш код задает «состояния» (нижний регистр S).
  2. Вы реализовали INotifyPropertyChanged для модели представления и вызвали обработчик события propertychanged
  3. Попробуйте обработать CollectionChanged из ObservableCollection, к которым вы добавляете состояния, поскольку свойство изменено не будет автоматически запускаться при добавлении элементов.
person dev.bv    schedule 10.11.2012
comment
На самом деле я забыл создать экземпляр observableCollection в конструкторе ViewModel. - person Gayatri; 11.11.2012