c# - 如何使用单选按钮排列列表框中的项目

标签 c# wpf listbox radio-button

好的,所以我希望能够在单击单选按钮“全部”时显示列表框中的所有信息。我还希望能够在单击“球员”单选按钮时“仅”显示球员,经理的单选按钮也是如此。有什么帮助吗?谢谢!

class Create
{
    public enum Job { Player, Manager }
    public string Name { get; set; }
    public int Age { get; set; }
    public Job Porm { get; set; }

    public Create(string name, int age, Job porm)
    {
        Name = name;
        Age = age;
        Porm = porm;
    }

    public override string ToString()
    {
        return string.Format("Name: {0} - Age {1} - {2}", Name, Age, Porm);
    }
}

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        ObservableCollection<Create> playersAndManagers;

        playersAndManagers = new ObservableCollection<Create>();

        Create newPlayer1 = new Create("John Terry", 27, Create.Job.Player);
        Create newManager1 = new Create("jose mourinho", 51, Create.Job.Manager);
        Create newPlayer2 = new Create("Wayne Rooney", 23, Create.Job.Player);
        Create newPlayer3 = new Create("David Beckham", 37, Create.Job.Player);
        Create newManager2 = new Create("David Moyes", 55, Create.Job.Manager);

        playersAndManagers.Add(newPlayer1);
        playersAndManagers.Add(newManager1);
        playersAndManagers.Add(newPlayer2);
        playersAndManagers.Add(newPlayer3);
        playersAndManagers.Add(newManager2);

        lbxInfo.ItemsSource = playersAndManagers;
    }
}


我有一张图片,但不允许我发布


实际上,这是 xaml 的代码

<Window x:Class="example1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <ListBox x:Name="lbxInfo" HorizontalAlignment="Left" Height="207" Margin="66,71,0,0" VerticalAlignment="Top" Width="368"/>
    <RadioButton x:Name="rbtnAll" Content="All" HorizontalAlignment="Left" Margin="66,28,0,0" VerticalAlignment="Top"/>
    <RadioButton x:Name="rbtnPlayers" Content="Players" HorizontalAlignment="Left" Margin="203,28,0,0" VerticalAlignment="Top"/>
    <RadioButton x:Name="rbtnManagers" Content="Managers" HorizontalAlignment="Left" Margin="352,28,0,0" VerticalAlignment="Top"/>

</Grid>

单选按钮

enter image description here

最佳答案

更改您的 IObservableCollection 以仅公开您想要的结果,而不是所有开始的结果,因此:

ObservableCollection<Create> results = new ObservableCollection<Create>();
lbxInfo.ItemsSource = results;

然后保留所有项目的集合:

// naming variables is not my strong point...
private IList<Create> _allPlayersAndManagers = new List<Create>();
_allPlayersAndManagers.Add(new Create("John Terry", 27, Create.Job.Player);

现在您所要做的就是在选中相应按钮时使用每个按钮的 Checked 事件填充结果:

<RadioButton x:Name="rbtnPlayers" Content="Players" Checked="OnPlayersChecked"/>

然后这样处理:

private void OnPlayersChecked(object source, RoutedEventArgs e)
{
    // must use the same observable instance as the binding uses
    // clear any existing entries
    results.Clear();

    // only care about players...
    foreach (var player in _allPlayersAndManagers.Where(c => c.Job == c.Job.Player))
    {
        results.Add(player);
    }
}

关于c# - 如何使用单选按钮排列列表框中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22235785/

相关文章:

c# - 检查有效日期

c# - 删除bmp头进行加密

c# - WPF 是否有 "static box"控件?

c# - 从外部 MVC 应用程序中的 CrmOrganizationServiceContext 获取 OrganizationServiceProxy

c# - UI 不更新 bool 更新

c# - WPF如何使文本框在按下回车后失去焦点

wpf - 在全屏窗口上可见背景

c# - 如何使用组合框过滤列表框项目?

c# - 为什么 foreach 在从 ListView 中删除项目时起作用,而在 ListBox 中不起作用?

wpf - 绑定(bind)到 List<string> 时如何使 ListBox 可编辑?