Telerik RadGridView插入新行MVVM

时间:2018-06-09 13:55:43

标签: c# mvvm telerik radgridview

我的视图中有一个RadGridView,我将其ItemSource绑定到我的ViewModel中的列表。一切正常。但是如何使用MVVM方法插入新行。我宁愿不使用代码隐藏。

<telerik:RadGridView x:Name="radGridView" Grid.Row="1" ShowGroupPanel="False" IsFilteringAllowed="False" ItemsSource="{Binding Lieferadressen}" ColumnWidth="*" />

有谁知道如何实现这一目标?

我无法在Telerik文档中找到有关使用MVVM插入新行的任何内容。

1 个答案:

答案 0 :(得分:0)

我自己想出来了,我会为那些苦苦挣扎的人发布我的答案。

所以基本方法是使用交互触发器。您必须通过NuGet将System.Windows.Interactivity包添加到项目中。

然后在包含RadGridView的xaml文件中添加以下2个名称空间:

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"

然后使用触发器配置RadGridView。

<telerik:RadGridView x:Name="radGridView" Grid.Row="1" ShowGroupPanel="False" IsFilteringAllowed="False" ItemsSource="{Binding Lieferadressen}" ColumnWidth="*">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="RowEditEnded">
            <ei:CallMethodAction TargetObject="{Binding}" MethodName="OnLieferadresseRowEditEnded" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</telerik:RadGridView>

EventName在这里很重要。

然后在你的ViewModel中:

public void OnLieferadresseRowEditEnded(object sender, GridViewRowEditEndedEventArgs e)
{
    var row = e.Row as GridViewRow;

    if (e.EditAction == GridViewEditAction.Cancel)
    {
        return;
    }
    else if (e.EditOperationType == GridViewEditOperationType.Insert)
    {
        //Insert the entry in the data base
    }
    else if (e.EditOperationType == GridViewEditOperationType.Edit)
    {
        //Update the entry in the data base
    }
}