Порядок обработки WPF Xaml - PullRequest
       21

Порядок обработки WPF Xaml

1 голос
/ 04 августа 2011

У меня есть простая форма адреса для клиента.Поле со списком страны и штата связано с ListCollectionViews.Это так, когда пользователь изменяет настройки страны, список состояний может быть отфильтрован в виде модели.Проблема в том, что когда форма загружает некоторую предыдущую информацию, поле со списком состояний остается пустым, даже если в нем есть данные.Похоже, из-за порядка их размещения в xaml.Если я поставлю поле со списком страны перед государством, если оно работает нормально, но я бы хотел, чтобы страна шла за государством.Есть ли способ оставить макет xaml таким, какой он есть, но обработать комбинированное поле страны перед состоянием?

Xaml:

<StackPanel Orientation="Horizontal">
    <TextBlock Height="23" Name="tbkMailState" Text="State/Province:" Width="80" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="2" Foreground="Black" />
    <ComboBox Height="23" Name="cmbMailState" Width="200" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="2" Foreground="Black" ItemsSource="{Binding GeoStateListMail}" SelectedValue="{Binding OpenEntityListing.EntityMailAddress.GeoState_Id}" DisplayMemberPath="Name" SelectedValuePath="Id" />
</StackPanel>
<StackPanel Orientation="Horizontal">
    <TextBlock Height="23" Name="tbkMailCountry" Text="Country:" Width="80" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="2" Foreground="Black" />
    <ComboBox Height="23" Name="cmbMailCountry" Width="200" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="2" Foreground="Black" ItemsSource="{Binding GeoCountryListMail, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedValue="{Binding OpenEntityListing.EntityMailAddress.GeoCountry_Id}" DisplayMemberPath="Name" SelectedValuePath="Id" IsSynchronizedWithCurrentItem="True" />
</StackPanel>

Фильтр ViewModel:

public void GeoCountry_CurrentChanged(object sender, EventArgs e)
{
    GeoStateList.Filter = item =>
    {
        GeoState vitem = item as GeoState;
        if ((OpenEntityListing == null) || (vitem == null))
        {
            return false;
        }
        return vitem.GeoCountry_Id == OpenEntityListing.EntityAddress.GeoCountry_Id;
    };
}

1 Ответ

2 голосов
/ 04 августа 2011

Было бы плохо зависеть от порядка обрабатываемого xaml.

Попробуйте найти подходящее событие в вашей ViewModel, когда ComboBox должен быть обновлен, и привяжите View к, возможно, дополнительному свойству в ViewModel.

...