Проблемы связывания элементов управления WPF - PullRequest
0 голосов
/ 21 февраля 2012
<ItemsControl ItemsSource="{Binding ExportFormat, UpdateSourceTrigger=PropertyChanged}" Grid.Column="1">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel Orientation="Horizontal"/>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Button Content="{Binding}" Margin="5" Height="50" Width="70" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.setExportFormat, UpdateSourceTrigger=PropertyChanged}" CommandParameter="{Binding}"></Button>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>

Таким образом, у меня есть этот код в моем xaml, и кнопка получает список строк. В зависимости от того, что пользователи выбирают в предыдущем Usercontrol, этот элемент будет заполнен различными элементами. Проблема в том, что если пользователь выберет один вариант при первом запуске, кнопка будет заполнена правильно, но если пользователь вернется и выберет другой вариант, элемент управления обновится и отобразит то же, что и раньше. Мой английский не самый лучший, но я думаю, что смог меня понять! Любая идея?! PS: привязка для Button относится к свойству readOnly, поэтому я не могу определить его для Mode = "TwoWay". Я посмотрел на отладку, и свойство ExportFormat получает обновления с новыми элементами, но usercontrol по-прежнему отображает первую опцию! !

С уважением Руи Нуньес

Ответы [ 2 ]

1 голос
/ 21 февраля 2012

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

  • Коллекция ExportFormat не является коллекцией ObservableCollection (или в более общем смысле)., не реализует INotifyCollectionChanged).

  • Если это действительно ObservableCollection, вы назначаете его напрямую, вместо того, чтобы очищать его элементы и добавлять новые.пример:

    ExportFormat = MyNewObsCollection; //Bad

ExportFormat.Clear();

foreach(var newItem in myNewObsCollection)
{
   ExportFormat.Add(newItem); //Good
}

Примечание: Экспортный формат должен быть доступен только для чтения

0 голосов
/ 22 февраля 2012

Спасибо @Baboon за то, что дали мне немного света по этой проблеме. Таким образом, решение моей проблемы:

Итак, мое свойство ExportFormat было определено как:

Private _ExportFormat As New List(Of String)
Public Property ExportFormat As List(Of String)
Get
Return _ExportFormat
End Get
Set(value As List(Of String))
_ExportFormat = value
NotifyPropertyChanged("ExportFormat")
End Set
End Property

и мне просто нужно было изменить список (из строки) на ObjectModel.ObservableCollection (из строки) ..

Private _ExportFormat As New ObjectModel.ObservableCollection(Of String)
Public Property ExportFormat As ObjectModel.ObservableCollection(Of String)
Get
        Return _ExportFormat
End Get
Set(value As ObjectModel.ObservableCollection(Of String))
_ExportFormat = value
NotifyPropertyChanged("ExportFormat")
End Set
End Property

И мои проблемы были решены .. Еще раз спасибо!

...