У меня есть такой ComboBox
<ComboBox
Grid.Column="1"
Padding="5,0,0,0"
DisplayMemberPath="Description"
SelectedItem="{Binding MaxXXAge, Mode=TwoWay, Converter={StaticResource MaxXXAgeToMaxXXAgeMemberConverter}}"
ItemsSource="{Binding ElementName=SettingsXXScrollViewer, Path=DataContext.MaxXXAgeMemberGroup, Mode=OneWay}" />
Однако после инициализации поле со списком остается пустым. После этого он действительно работает нормально. Я могу выбрать и показать выбранный элемент, как и ожидалось. Просто с первого взгляда не получается. Однако я уже инициализировал MaxXXAge, и преобразователь сработал. Вот группа
public IReadOnlyList<MaxXXAgeMembers> MaxXXAgeMemberGroup { get { return MaxXXAgeMembers.Options; } }
И это определение MaxXXAgeMembers
public class MaxXXAgeMembers
{
public MaxXXAge MaxXXAge { get; private set; }
public string Description { get; private set; }
public static readonly IReadOnlyList<MaxXXAgeMembers> Options = new ReadOnlyCollection<MaxXXAgeMembers>(new[]
{
new MaxXXAgeMembers { MaxXXAge = MaxXXAge.OneDay, Description = Strings.SettingSync_OneDay},
.......
});
public static MaxXXAgeMembers FromMaxXXAge(MaxXXAge maxXXAge)
{
return Options.First(option => option.MaxXXAge == maxXXAge);
}
}
// Позже добавили переопределение Equals
public override bool Equals(object obj)
{
if (obj == null || !(obj is MaxEmailAgeMembers))
return false;
return ((MaxEmailAgeMembers)obj).Description.Equals(this.Description);
}
public override int GetHashCode()
{
return this.Description.GetHashCode();
}
Конвертер такой
public sealed class MaxEmailAgeToMaxEmailAgeMemberConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return WPSettingsEmailViewModel.MaxEmailAgeMembers.FromMaxEmailAge((MaxEmailAge)value);
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return ((WPSettingsEmailViewModel.MaxEmailAgeMembers)value).MaxEmailAge;
}
}
Любая идея?
MaxEmailAgeToMaxEmailAgeMemberConverter.Convert()
и подтвердили, что (а)(MaxEmailAge)value
не равно нулю и (б)...FromMaxEmailAge((MaxEmailAge)value)
не равно нулю? - person 15ee8f99-57ff-4f92-890c-b56153   schedule 24.08.2016ItemsSource
, а затем установите начальное значение для свойства, которое будет управлятьSelectedItem
. - person 15ee8f99-57ff-4f92-890c-b56153   schedule 24.08.2016ObservableCollection
илиReadOnlyObservableCollection
для любой коллекции в модели просмотра, которая будет в пользовательском интерфейсе, и повышениеPropertyChanged
при замене любой коллекции; но вы все равно должны это делать. - person 15ee8f99-57ff-4f92-890c-b56153   schedule 24.08.2016x:Bind
, да, упс - по крайней мере, я предупреждал вас, что не знаю UWP! - person 15ee8f99-57ff-4f92-890c-b56153   schedule 24.08.2016