У меня есть ComboBox, который использует ObservableCollection как источник. У меня есть источник связаны следующимComboBox, связанный с ObservableCollection, не обновляется
<ComboBox IsEditable="False"
SelectedIndex="{Binding Source={x:Static Properties:CollectionControl.Settings}, Path=SamplingPeriodIndex, Mode=TwoWay}"
SelectionChanged="onPeriodControlSelectionChanged"
Name="PeriodControl"
ItemsSource="{StaticResource test}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding SamplingPeriod}" Visibility="{Binding Converter={StaticResource TrackVis}, ConverterParameter=GroupIndex}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
TrackVis является преобразователем, который определяет, является ли элемент видимым или свернуты в зависимости от внешнего имущества, которое реализуется INotifyPropertyChanged.
Все работает как ожидается при первом отображении ComboBox, но ComboBox никогда не обновляется, чтобы отражать изменения. Я должен что-то упустить, но на данный момент все, что я пробовал, терпит неудачу.
Вот код для преобразователя
public class IsVisibleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
var tempObj = (SamplingPeriods) value;
if (tempObj.GroupIndex >= CollectionControl.Settings.SamplingFrequencyIndex)
{
return Visibility.Visible;
}
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Кроме того, здесь является коллекция
public class PeriodsCollection : ObservableCollection<SamplingPeriods>
{
public PeriodsCollection()
{
Add(new SamplingPeriods("1/16 of a second", 13));
Add(new SamplingPeriods("1/8 of a second", 12));
Add(new SamplingPeriods("1/4 of a second", 11));
Add(new SamplingPeriods("1/2 of a second", 10));
Add(new SamplingPeriods("1 second", 9));
Add(new SamplingPeriods("2 seconds", 8));
Add(new SamplingPeriods("4 seconds", 7));
Add(new SamplingPeriods("8 seconds", 6));
Add(new SamplingPeriods("16 seconds", 5));
Add(new SamplingPeriods("32 seconds", 4));
Add(new SamplingPeriods("64 seconds", 3));
Add(new SamplingPeriods("128 seconds", 2));
Add(new SamplingPeriods("256 seconds", 1));
Add(new SamplingPeriods("512 seconds", 0));
}
}
public class SamplingPeriods
{
public SamplingPeriods(string samplingPeriod, int groupIndex)
{
SamplingPeriod = samplingPeriod;
GroupIndex = groupIndex;
}
public string SamplingPeriod { get; private set; }
public int GroupIndex { get; private set; }
}
Идея заключается в том, что выбранная частота дискретизации ограничивает периоды выборки, которые доступны. Индекс частоты дискретизации колеблется от 0 до 11. Например, если индекс выборки равен 9, единственные допустимые периоды выборки будут иметь значение GroupIndex> = 9. Остальные периоды выборки будут свернуты.
Почему StaticResource, а не просто назвать собственности? – sll
Изменения в TrackVis или выбранном индексе или в обоих случаях? – Tyrsius
Очень важно, задавая такой вопрос, чтобы быть конкретным о том, что не обновляется. Новые элементы не отображаются в 'ComboBox', когда вы добавляете их в коллекцию? Является ли 'SelectedIndex' не обновляющимся при изменении связанного свойства в коде? Что конкретно происходит и не происходит? –