具有不同值的重复列

Duplicate column with different values

我正在尝试制作一个简单的下载管理器,我在添加带有 ProgressBars 的列时遇到了问题,它创建了具有相同值的两列,但其中一列有 数字和一个具有进度条值。我怎样才能隐藏或删除 "Progress1" 但仍然保留 "Progress2"

中的值

这里是主要的xaml

        <DataGrid.Columns>

            <!--#region Program Number -->
            <DataGridTemplateColumn SortMemberPath="#" Header="#">
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>

                        <TextBlock Text="{Binding ProgramID}"/>

                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>
            <!--#endregion-->


            <!--#region Program Number -->
            <DataGridTemplateColumn SortMemberPath="Name" Header="Name">
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>

                        <TextBlock Text="{Binding Name}"/>

                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>
            <!--#endregion-->


            <!--#region Program Number -->
            <DataGridTemplateColumn SortMemberPath="Size" Header="Size">
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>

                        <TextBlock Text="{Binding Size}"/>

                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>
            <!--#endregion-->


            <!--#region Progress bar columns -->
            <DataGridTemplateColumn SortMemberPath="Progress" 
                                    Header="Progress" Width="100">
                <DataGridTemplateColumn.CellTemplate>

                    <DataTemplate>

                        <ProgressBar Value="{Binding Progress}" 
                                     Height="15"/>

                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <!--#endregion-->

            </DataGrid.Columns>
    </DataGrid>

这是程序的代码隐藏

    public class Programs : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public void OnProperyChanged(string PropertyName)
        {


            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));

        }


        private int _programid;
        public int ProgramID
        {

            get { return _programid; }

            set
            {
                _programid = value;

                OnProperyChanged($"{nameof(ProgramID)}");
            } 
        }


        private string _name;
        public string Name
        {
            get { return _name; }
            set
            {
                _name = value;
                OnProperyChanged($"{nameof(Name)}");
            }
        }


        private double _size;
        public double Size
        {
            get { return _size; }
            set
            {
                _size = value;

                OnProperyChanged($"{nameof(Size)}");

            }
        }


        private double _progress;
        public double Progress
        {
            get { return _progress; }

            set
            {
                _progress = value;

                OnProperyChanged($"{nameof(Progress)}");

            }
        }

        public ObservableCollection<Programs> ProgramList()
        {

            ObservableCollection<Programs> programs = new ObservableCollection<Programs>
            {

                new Programs { _programid = 1, _name = "Program0", _size = 5.1, _progress = 100 },

                new Programs { _programid = 2, _name = "Program1", _size = 7.1, _progress = 36.7 },

                new Programs { _programid = 3, _name = "Program2", _size = 1.1, _progress = 44.7 },

                new Programs { _programid = 4, _name = "Program3", _size = 6.1, _progress = 88.7 },

                new Programs { _programid = 5, _name = "Program4", _size = 2.1, _progress = 89.7 },

                new Programs { _programid = 6, _name = "Program5", _size = 9.1, _progress = 68.7 },

                new Programs { _programid = 7, _name = "Program6", _size = 5.1, _progress = 98.7 },

                new Programs { _programid = 8, _name = "Program7", _size = 2.1, _progress = 59.7 },

                new Programs { _programid = 9, _name = "Program8", _size = 83.1, _progress = 18.7 }

            };

            return programs;

        }
    }

Here is what it look like (第一次发帖提问,如有遗漏欢迎补充)

问题是因为您没有设置 AutoGeneratedColumns="false" 并且 true 是默认设置,所以列正在自动生成。

当您未将其设置为 false 时,DataGrid 将为分配的视图模型中的每个 属性 生成一列。

有关详细信息,请查看 DataGrid.AutoGenerateColumns Property

当您将其设置为 false 时,您只会看到进度条。因此,您必须像使用 ProgressBar.

那样指定其他列

你可以这样吗

<DataGrid.Columns> 
    <DataGridTextColumn Binding="{Binding ProgramID}"/>
    <DataGridTextColumn Binding="{Binding Name}"/>
    <DataGridTextColumn Binding="{Binding Size}"/>
    <DataGridTemplateColumn SortMemberPath="Progress" Header="Progress2">                                            
       <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <ProgressBar Value="{Binding Progress1}"/>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
</DataGrid.Columns>

编辑

像这样使用DataGridTextColumn

<DataGridTextColumn SortMemberPath="ProgramID" 
                    Header="#" 
                    Binding="{Binding ProgramID}"/>

而不是 TemplateColumn 当你想显示文本时。容易得多;)

为什么你的代码看不到任何东西的问题是你只设置了 CellEditingTemplate 而不是 CellTemplate.

CellEditingTemplate 是单元格处于编辑模式时将显示的模板。

CellTemplate 是单元格未处于编辑模式时显示的内容。

当你不想按照你的方式去做时,你必须像

那样改变它
<DataGridTemplateColumn SortMemberPath="ProgramID" Header="#">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding ProgramID}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>