wpf datagrid用户添加行celldatatemplate值乘坐

时间:2014-04-08 05:57:13

标签: c# wpf datagrid

我有一些奇怪的问题。

我有

<Custom:DataGridTemplateColumn Header="Дата выдачи" Width="130" >
   <Custom:DataGridTemplateColumn.CellTemplate>
       <DataTemplate >
            <Custom:DatePicker SelectedDate="{Binding LicenseDateStart}" />
        </DataTemplate>
   </Custom:DataGridTemplateColumn.CellTemplate>
</Custom:DataGridTemplateColumn>

和这个

 public ObservableCollection<OrgInfoProftraining> ListOrgInfoProftraining
    {
        get
        {
            return new ObservableCollection<OrgInfoProftraining>(_ListOrgInfoProftraining);
        }
        set
        {
            _ListOrgInfoProftraining = value.ToList();
            OnPropertyChanged("ListOrgInfoProftraining");

        }
    }

我填充第一行,然后点击另一个控件(行失去焦点)和datepicker(或其值)骑到第2行。为什么? 填写row1后,我点击回车,工作正确。

enter image description here

P.S。我猜它可以是ObservableCollection,当我在datepicker上选择日期时,它可以对templatecolumn中的更改作出反应并创建新项目...

2 个答案:

答案 0 :(得分:0)

好吧,当我们使用MVVM和datagrid时,当我们向datagrid添加新行时,我们无法捕获事件行创建,因此view-model不知道新元素。

我添加了两个按钮&#34;添加&#34;并且&#34;删除&#34;没关系。 可能不是很好的解决方案,但它很快=)

答案 1 :(得分:0)

问题出现是因为单元格模板被重用于下一行,所以这里有一些假设是一个解决方案

您需要分隔单元格模板和编辑模板,或者至少在非编辑模式下将IsEnabled设置为false

例如

<Custom:DataGridTemplateColumn Header="Дата выдачи"
                               Width="130">
    <Custom:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding LicenseDateStart}" />
        </DataTemplate>
    </Custom:DataGridTemplateColumn.CellTemplate>
    <Custom:DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <Custom:DatePicker SelectedDate="{Binding LicenseDateStart}" />
        </DataTemplate>
    </Custom:DataGridTemplateColumn.CellEditingTemplate>
</Custom:DataGridTemplateColumn>

<Custom:DataGridTemplateColumn Header="Дата выдачи"
                               Width="130">
    <Custom:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Custom:DatePicker SelectedDate="{Binding LicenseDateStart}" IsEnabled="False"/>
        </DataTemplate>
    </Custom:DataGridTemplateColumn.CellTemplate>
    <Custom:DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <Custom:DatePicker SelectedDate="{Binding LicenseDateStart}" />
        </DataTemplate>
    </Custom:DataGridTemplateColumn.CellEditingTemplate>
</Custom:DataGridTemplateColumn>