wpf - 更改 Button.Click 上的 ListBox.ItemsSource 绑定(bind)属性?

标签 wpf data-binding listbox itemssource

快速提问...

我有一个 ListBox及其ItemsSource属性绑定(bind)到 View 模型中的集合属性,如下所示:

<ListBox Name="CollectionsListBox" ItemsSource="{Binding Activity.Timesheets}" />

我也有两个Button同一 View 中的对象。问题是...我可以更改 CollectionsListBox ItemsSource Binding来自 Activity.TimesheetsActivity.Attachments只使用 XAML?

做不到这一点,从使用命令对象的 View 模型?

编辑>>>

我通过使用 RadioButton 找到了一个简单的解决方案s 而不是 Button来自霍华德回答的一部分:
<ListBox Name="CollectionsListBox">
    <ListBox.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=TimesheetsButton,Path=IsChecked}" Value="True">
                    <Setter Property="ListBox.ItemsSource" Value="{Binding Activity.Timesheets}" />
                    <Setter Property="ListBox.ItemContainerStyle" Value="{StaticResource TimesheetStyle}" />
                </DataTrigger>
                <DataTrigger Binding="{Binding ElementName=AttachmentsButton,Path=IsChecked}" Value="True">
                    <Setter Property="ListBox.ItemsSource" Value="{Binding Activity.Attachments}" />
                    <Setter Property="ListBox.ItemContainerStyle" Value="{StaticResource AttachmentStyle}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ListBox.Style>
</ListBox>

非常感谢您的帮助。

最佳答案

我不确定 Button 是否可以做到这一点。但是单选按钮只能在 XAML 中满足您的要求。

假设我们有两个枚举:

public enum E { A = 0, B = 1, C = 2 }
public enum F { G = 0, H = 1, L = 2 }

我将它们定义为 XAML 中的资源:
<ObjectDataProvider ObjectType="{x:Type sys:Enum}" MethodName="GetValues" x:Key="EProvider">
    <ObjectDataProvider.MethodParameters>
        <x:TypeExtension Type="{x:Type local:E}" />
    </ObjectDataProvider.MethodParameters>
</ObjectDataProvider>

<ObjectDataProvider ObjectType="{x:Type sys:Enum}" MethodName="GetValues" x:Key="FProvider">
    <ObjectDataProvider.MethodParameters>
        <x:TypeExtension Type="{x:Type local:F}" />
    </ObjectDataProvider.MethodParameters>
</ObjectDataProvider>

然后我们开始:
<ListBox x:Name="List1">
    <ListBox.Style>
        <Style>
            <Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding ElementName=Rdb1,Path=IsChecked}" Value="True"/>
                    </MultiDataTrigger.Conditions>
                    <Setter Property="ListBox.ItemsSource" Value="{Binding Source={StaticResource EProvider}}" />
                </MultiDataTrigger>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding ElementName=Rdb2,Path=IsChecked}" Value="True"/>
                    </MultiDataTrigger.Conditions>
                    <Setter Property="ListBox.ItemsSource" Value="{Binding Source={StaticResource FProvider}}" />
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>
    </ListBox.Style>
</ListBox>
<RadioButton x:Name="Rdb1" GroupName="Group1" />
<RadioButton x:Name="Rdb2" GroupName="Group1" />

关于wpf - 更改 Button.Click 上的 ListBox.ItemsSource 绑定(bind)属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5751651/

相关文章:

c# - 有没有办法在 ErrorTemplate 中设置工具提示?

WPF - 自定义设计音量控制

java - 自动将字符串转换为Java对象

wpf - 如何在WPF中的ListBox中编写 "Selection Changing"事件?

c# - Wpf C# 日期时间数据库

wpf mvvm 绑定(bind) View 到模型

c# - 具有自定义用户控件的多阶段数据绑定(bind)

wpf - 在wpf MVVM中使用按钮删除列表框中的项目

Python - 如何删除选定列表框项目周围的边框?

wpf - 以 wpf 形式加载设计器时出错