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&lt;T&gt; 替换为ObservableCollection&lt;T&gt;,但很快事情就会变得棘手。我建议阅读ObservableCollection&lt;T&gt;

【讨论】:

以上是关于Blend/XAML:通过按钮绑定 ItemsSource的主要内容,如果未能解决你的问题,请参考以下文章

VB.NET 或 C#,silverlight 数据网格绑定

通过lay-filter给layui的按钮绑定监听事件

如何通过按钮单击绑定 Blazor 中的 textarea 值?

js如何给按钮添加点击事件

python绑定函数到一个按钮[重复]

vue 表单之通过v-model绑定单选按钮radio