в моем приложении Я использую два пользовательских элемента управления: UserControl1 является основным, внутри него я использую UserControl2 шесть раз.WPF: Как получить доступ к наблюдаемому коллекциям во вложенном usercontrol?
UserControl2 имеет несколько combobox, и я хотел бы их динамически заполнять из окончательного приложения. В начале я пытаюсь привязать данные к одному из них.
выпадающий в UserControl2 выглядеть следующим образом:
<ComboBox x:Name="VidTransform" Template="{DynamicResource BaseComboBoxStyle}" ItemContainerStyle="{DynamicResource BaseComboBoxItemStyle}" Grid.Row="1" ItemsSource="{Binding Path=DataContext.VidTransformsNames,ElementName=Ch_Parameters, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" SelectedValue="{Binding Path=SelectedTransform,ElementName=Ch_Parameters, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
На данный момент я только в состоянии заполнить его вручную, используя эту ObservableCollection (все строки отображается корректно):
private ObservableCollection<string> _VidTransformsNames = new ObservableCollection<string>(new[] { "test0", "test1", "test2", "test3", "test4", "test5" });
public ObservableCollection<string> VidTransformsNames
{
get { return _VidTransformsNames; }
set { _VidTransformsNames = value; }
}
В UserControl1 (который содержит UserControl2) я попытался создать другой ObservableCollection и выполнить его динамически во время выполнения в моем конечном приложении.
Здесь:
private ObservableCollection<string> _VideoTransformsNames = new ObservableCollection<string>(new[] { "Test0", "Test1", "Test2", "Test3", "Test4", "Test5" });
public ObservableCollection<string> VideoTransformsNames
{
get { return _VideoTransformsNames; }
set { _VideoTransformsNames = value; }
}
И затем связывание:
<local:UserControl1 VidTransformsNames="{Binding Path=VideoTransformsNames, ElementName=cmix, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
Я новичок, но здесь я не так уверен, как я получаю эту ошибку:
«Связывание» не может быть установлено в свойстве «VidTransformsNames» типа «UserControl1». «Связывание» может быть установлено только на DependencyProperty объекта DependencyObject.
Как я могу получить доступ и выполнить во время выполнения наблюдаемый сборник UserControl2, если он вложен в UserControl1?
Что недвижимости Вы говорите точно? следует ли использовать DependencyProperty вместо ObservableCollection? – lecloneur
Вам нужно создать 'public static readonly DependecyProperty YourName', а затем зарегистрировать его правильно.В регистрационной части вам нужно будет добавить в ваш случай 'typeof (ObservableCollection)' –
MadOX
действительно, это работает сейчас. Я не знал, что наблюдаемый сбор может быть типом зависимости. Спасибо за вашу помощь. – lecloneur