<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上的bindind是一个readOnly属性所以我不能将它定义为Mode =“TwoWay”..我看一下调试和属性ExportFormat获取新项目的更新,但usercontrol仍然显示第一个选项! !
真诚的Rui Nunes
答案 0 :(得分:1)
你没有提供代码隐藏所以我会在黑暗中拍几张照片:
ExportFormat
集合不是ObservableCollection(或更一般地说,不实现INotifyCollectionChanged
)。
如果它实际上是ObservableCollection,则直接指定它,而不是清除其项目并添加新项目。例如:
ExportFormat = MyNewObsCollection; //Bad
ExportFormat.Clear();
foreach(var newItem in myNewObsCollection)
{
ExportFormat.Add(newItem); //Good
}
附注:ExportFormat应为readonly
答案 1 :(得分:0)
感谢@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
我只需将List(of String)更改为ObjectModel.ObservableCollection(Of String)..
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
我的问题解决了......再次感谢!