【问题标题】:Customized Datagrid in C# XAML not workingC# XAML 中的自定义数据网格不起作用
【发布时间】:2021-03-07 19:32:51
【问题描述】:

我的XAML 中有这个DataGrid:

<DataGrid Width="250" Height="250" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding PersonList}">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Name}" Header="Name" Width="200"/>
        <DataGridTextColumn Binding="{Binding Age}" Header="Alter" Width="50"/>
    </DataGrid.Columns>
</DataGrid>

这是我的视图模型:

private readonly MyPersonContext db = new MyPersonContext();

public MyViewModel()
{
    personList = db.Persons.ToList();
}

private List<Person> personList;
public List<Person> PersonList
{
    get => personList;
    set { 
        personList = value;
        RaisePropertyChangedEvent(nameof(PersonList));
    }
}

问题是显示了我的自定义 DataGrid,但之后显示了所有数据库内容

【问题讨论】:

    标签: c# .net wpf mvvm


    【解决方案1】:

    在DataGrid 上将AutoGenerateColumns 设置为false:

    <DataGrid Width="250" Height="250" IsSynchronizedWithCurrentItem="True" 
              ItemsSource="{Binding PersonList}"
              AutoGenerateColumns="False" >
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Name}" Header="Name" Width="200"/>
            <DataGridTextColumn Binding="{Binding Age}" Header="Alter" Width="50"/>
        </DataGrid.Columns>
    </DataGrid>
    

    默认值为true,因此DataGrid 将生成所有列,除非它被关闭。

    【讨论】:

      【解决方案2】:

      我不确定我是否正确理解了问题陈述,您是说显示了所有数据库内容 - 这是否意味着显示所有列或所有行(如果是行),这不是意图吗?

      我想在代码块中更正的一件事是,在构造函数中,您正在初始化 personlist 的私有成员,请尝试改写 -

      public MyViewModel() { PersonList = db.Persons.ToList(); }

      【讨论】:

      • 这不会有任何区别。
      猜你喜欢
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-09
      • 1970-01-01
      相关资源
      最近更新 更多