代码之家  ›  专栏  ›  技术社区  ›  user7580204

具有不同值的重复列

  •  1
  • user7580204  · 技术社区  · 8 年前

    数值,其中一个具有progressbar值。如何使“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 (第一次发布问题,如果有什么遗漏,我很乐意补充)

    1 回复  |  直到 8 年前
        1
  •  0
  •   Mighty Badaboom Karthick Raju    8 年前

    问题是列正在自动生成,因为您没有设置 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 .

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

    这个 当单元格未处于编辑模式时将显示。

    当你不想按自己的方式做时,你必须像这样改变

    <DataGridTemplateColumn SortMemberPath="ProgramID" Header="#">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding ProgramID}"/>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>