【问题标题】:How to show that the checkbox is actually checked如何显示复选框已被实际选中
【发布时间】:2019-07-24 09:29:29
【问题描述】:

我正在编写一个程序,该程序允许用户选择多个文件并使用它们进行操作。我使用复选框来选择绑定到 ListView 的所有需要​​的文件。我需要一个按钮来一次选择所有文件。后端部分有效,前端无效。

我尝试了多线程,使用 Refresh() 方法并到处研究像我这样的问题

这是 Listview 填充文件的方式,每个文件都有一个复选框:

<ListView   Grid.Row="0" VerticalAlignment="Top" Height="400" BorderBrush="Black" BorderThickness="2" Grid.ColumnSpan="4"  ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto" ItemsSource="{Binding Files}" Background="White">
                <ListView.View>
                    <GridView AllowsColumnReorder="False" >
                        <GridViewColumn DisplayMemberBinding="{Binding File.FullName}"  Header="Full Name" Width="200" />
                        <GridViewColumn DisplayMemberBinding="{Binding File.Name}" Header="Name" Width="200" />
                        <GridViewColumn DisplayMemberBinding="{Binding File.LastWriteTime, StringFormat='dd-MM-yyyy'}" Header="Last Modified" Width="200"/>
                        <GridViewColumn DisplayMemberBinding="{Binding File.Length}" Header="Size" Width="150"/>
                        <GridViewColumn Header="Select" Width="100" >
                            <GridViewColumn.CellTemplate >
                                <DataTemplate >
                                    <CheckBox x:Name="cb1" IsChecked="{Binding Path=Selected}" />
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView>
                </ListView.View>

注意:x:Name="cb1" 是一个测试,用于检查我是否可以从 MainWindow.xaml.cs 使用它,但它不起作用(可能是因为它有多个文件的问题?)

selectAll() 方法的后端是这样工作的:

private void SelectAll()
        { //1st version. this works but checkboxes are not flagged
            var dc = DataContext as FileList;
            foreach (var _file in dc.Files)
            {
                _file.Selected = true;

            }
            //2nd version. this doesn't work at all
            for (int i = 0; i < cb1.Items.Count; i++)
            {
                cb1.SetItemChecked(i, true); //cb1 doesn't exist in the current context
            }

        }

我有一个名为 FileWrapper 的类,它是一个 FileInfo 类,我在其中添加了一个“Selected”布尔属性,该属性绑定到“IsChecked”参数。 FileList 用于创建 FileWrapper 列表。

作为此代码的作者,我确切地知道,无论何时单击全选按钮,都会选择所有文件。由于我不是程序的最终用户,我需要一个图形元素来告诉用户哪些文件被选中,哪些文件未被选中。也可能是用户需要列表中 102 个文件中的 100 个,因此他先全选然后取消选择其中 2 个会更快。

【问题讨论】:

  • 'Selected' 属性是否有 OnPropertyChange() ?
  • 在行视图模型中实现 inotifypropertychanged,检查 selected 是公共属性并在 jt 设置时引发 propertychanged。您可能还必须在 ischecked 绑定上设置 mode=twoway。
  • FileWrapper 类如下所示: ` public FileWrapper(FileInfo file) { File = file;选择=假; } 公共文件信息文件 { 获取;放; } 公共布尔选择 { 获取;放; } ` @Aakanksha 能否请您提供一个链接,详细解释 OnPropertyChange() ?谢谢
  • 对不起,我不知道如何正确显示代码:(
  • 在你的模型中你需要继承INotifyPropertyChanged接口并实现OnPropertyChanged方法。然后在你的属性设置器中调用方法

标签: c# wpf listview checkboxlist


【解决方案1】:

您可以如下更改模型以更新 UI。

public class FileWrapper : INotifyPropertyChanged
{
    private FileInfo _file;
    private bool _selected; 

    public FileWrapper(FileInfo file) 
    { 
        File = file; 
        Selected = false; 
    } 

    public FileInfo File 
    { 
        get { return _file; }
        set
        {
            _file = value;
            OnPropertyChanged("File")
        }
    } 

    public bool Selected 
    { 
        get { return _selected ; }
        set
        {
            _selected = value;
            OnPropertyChanged("Selected")
        }
    } 

    public event PropertyChangedEventHandler PropertyChanged;  
    private void OnPropertyChanged(string propertyname) 
    {  
        if (PropertyChanged != null) 
        {  
            PropertyChanged(this, new PropertyChangedEventArgs(propertyname));  
        }  
    }  
}

参考:https://www.c-sharpcorner.com/article/explain-inotifypropertychanged-in-wpf-mvvm/了解INotifyPropertyChange接口

【讨论】:

    猜你喜欢
    • 2019-12-31
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多