Dav*_*man 8 wpf datagrid wpfdatagrid
我正在创建一个带有a的WPF窗口DataGrid
,我想在网格底部显示空白的"新项目"行,允许我向网格添加新项目.由于某种原因,我的窗口上的网格上没有显示空白行.这是我用来创建的标记DataGrid
:
<toolkit:DataGrid x:Name="ProjectTasksDataGrid"
DockPanel.Dock="Top"
Style="{DynamicResource {x:Static res:SharedResources.FsBlueGridKey}}"
AutoGenerateColumns="False"
ItemsSource="{Binding SelectedProject.Tasks}"
RowHeaderWidth="0"
MouseMove="OnStartDrag"
DragEnter="OnCheckDropTarget"
DragOver="OnCheckDropTarget"
DragLeave="OnCheckDropTarget"
Drop="OnDrop"
InitializingNewItem="ProjectTasksDataGrid_InitializingNewItem">
<toolkit:DataGrid.Columns>
<toolkit:DataGridCheckBoxColumn HeaderTemplate="{DynamicResource {x:Static res:SharedResources.CheckmarkHeaderKey}}" Width="25" Binding="{Binding Completed}" IsReadOnly="false"/>
<toolkit:DataGridTextColumn Header="Days" Width="75" Binding="{Binding NumDays}" IsReadOnly="false"/>
<toolkit:DataGridTextColumn Header="Due Date" Width="75" Binding="{Binding DueDate, Converter={StaticResource standardDateConverter}}" IsReadOnly="false"/>
<toolkit:DataGridTextColumn Header="Description" Width="*" Binding="{Binding Description}" IsReadOnly="false"/>
</toolkit:DataGrid.Columns>
</toolkit:DataGrid>
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚为什么空白行没有显示.我尝试了明显的东西(IsReadOnly="false"
,CanUserAddRows="True"
),没有运气.知道空行被禁用的原因吗?谢谢你的帮助.
Vincent Sibal发表了一篇文章,描述了向DataGrid添加新行所需的内容.有很多可能性,其中大部分取决于您使用的集合类型SelectedProject.Tasks
.
我建议确保"任务"不是只读集合,并且它支持所需的接口之一(在上一个链接中提到),以允许使用DataGrid正确添加新项目.
终于回到了这个.我不打算改变接受的答案(绿色复选标记),但这是问题的原因:
My View Model包装域类以提供WPF所需的基础结构.我在我使用的wrap方法上写了一篇CodeProject文章,其中包含一个有两个类型参数的集合类:
VmCollection<VM, DM>
Run Code Online (Sandbox Code Playgroud)
其中DM是包装域类,DM是包装它的WPF类.
事实证明,由于一些奇怪的原因,在集合类中使用第二个类型参数会导致WPF DataGrid无法编辑.修复是消除第二个类型参数.
不能说为什么会这样,只有它确实如此.希望它可以帮助其他人.
在我看来,这是DataGrid中的一个错误. Mike Blandford的链接帮助我最终意识到问题所在:DataGrid在绑定真实对象之前无法识别行的类型.编辑行不会出现b/c数据网格不知道列类型.您会认为绑定强类型集合会起作用,但事实并非如此.
要扩展Mike Blandford的答案,您必须先分配空集合,然后添加和删除一行.例如,
private void Window_Loaded(object sender, RoutedEventArgs e)
{
// data binding
dataGridUsers.ItemsSource = GetMembershipUsers();
EntRefUserDataSet.EntRefUserDataTable dt = (EntRefUserDataSet.EntRefUserDataTable)dataGridUsers.ItemsSource;
// hack to force edit row to appear for empty collections
if (dt.Rows.Count == 0)
{
dt.AddEntRefUserRow("", "", false, false);
dt.Rows[0].Delete();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18050 次 |
最近记录: |