Blend/XAML:通过按钮绑定 ItemsSource
Posted
技术标签:
【中文标题】Blend/XAML:通过按钮绑定 ItemsSource【英文标题】:Blend/XAML: bind ItemsSource via button 【发布时间】:2014-01-23 13:43:40 【问题描述】:我正在创建一个 Windows 8.1 应用程序并具有以下代码:
<ListView x:Name="listView" Height="505" Canvas.Left="35" Canvas.Top="75" Width="300" ItemTemplate="StaticResource GroupTemplate" ItemsSource="Binding Groups, Mode=TwoWay, UpdateSourceTrigger=Explicit" HorizontalAlignment="Left" VerticalAlignment="Top" UseLayoutRounding="False" ScrollViewer.VerticalScrollBarVisibility="Disabled" SelectionMode="None" />
<Button Height="40" Width="260" HorizontalAlignment="Left" VerticalAlignment="Top" Canvas.Left="40" Canvas.Top="585" BorderThickness="0" Content="Overige tonen" Background="#FF9B9B9B" Style="StaticResource ButtonStyle1" Click="show_items2" />
当用户单击show_items2
按钮时,ItemsSource
组应替换为另一个ItemsSource
。我使用 Blend for Visual Studio 2013 中的 sampledata 'Groups'。我有非常明显的按钮代码,如下所示:
private void show_Medicatie2(object sender, RoutedEventArgs e)
// replace itemsSource with another
我尝试了很多教程,但没有任何接缝可以工作。我错过了什么吗?非常感谢您的帮助。谢谢!
【问题讨论】:
【参考方案1】:更改Groups
时需要RaisePropertyChanged("Groups")
【讨论】:
【参考方案2】:您要绑定的类(在您的情况下是Groups
的所有者)必须是INotifyPropertyChanged
,以便您可以明确告诉 WPF 绑定需要刷新.如果您不使用DependencyProperties
,这是一项要求。
将此添加到您的类定义中:
class X : System.ComponentModel.INotifyPropertyChanged
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
public IEnumerable<object> Groups //Replace 'object' with the type your are using...
get return m_Groups;
set
m_Groups = value;
//Raise the event to notify that the property has actually got a new value
var handler = PropertyChanged;
if(handler != null)
PropertyChanged(this, new PropertyChangedEventArgs("Groups"));
IEnumerable<object> m_Groups = new List<object>();
为什么会这样?
WPF 知道INotifyPropertyChanged
,当您使用对象作为绑定源时,WPF 会检查它是否实现了接口。如果是,则 WPF 订阅该事件。触发事件时,会检查属性名称,如果匹配绑定路径中的最后一个属性,则更新绑定。
您也可以将IEnumerable<T>
替换为ObservableCollection<T>
,但很快事情就会变得棘手。我建议阅读ObservableCollection<T>
!
【讨论】:
以上是关于Blend/XAML:通过按钮绑定 ItemsSource的主要内容,如果未能解决你的问题,请参考以下文章
VB.NET 或 C#,silverlight 数据网格绑定