C# 一次添加多行

C# 一次添加多行,c#,wpf,mvvm,telerik,C#,Wpf,Mvvm,Telerik,我只是从WPF和MVVM框架开始。我有一个带有telerikRadGridView的窗口,我想同时添加来自多行的数据。有没有人有任何建议或例子,我尝试了很多方法,但似乎都没有成功 多谢各位 我的视图模型 private IList<Ligne> _CurrentLigne; public IList<Ligne> CurrentLigne { get { return _CurrentLigne; } set { _CurrentL

我只是从WPF和MVVM框架开始。我有一个带有telerik
RadGridView
的窗口,我想同时添加来自多行的数据。有没有人有任何建议或例子,我尝试了很多方法,但似乎都没有成功

多谢各位

我的视图模型

private IList<Ligne> _CurrentLigne;
public IList<Ligne> CurrentLigne
{
    get { return _CurrentLigne; }
    set
    {
        _CurrentLigne= value;
        OnPropertyChanged("CurrentLigne");
    }
}

var _ligne = Currentligne as Ligne;

foreach (Ligne ligne in CurrentLigne)
{
    if (Currentligne!= null)    
    _ligneBLL.InsetLigne(ligne);
}
private IList\u CurrentLigne;
公共图书馆
{
获取{return\u CurrentLigne;}
设置
{
_currentligine=值;
OnPropertyChanged(“CurrentLigne”);
}
}
var_ligne=当前ligne作为ligne;
foreach(当前Ligne中的Ligne-Ligne)
{
if(Currentligne!=null)
_ligneBLL.InsetLigne(ligne);
}
我的看法

<telerik:RadGridView  x:Name="GridView"
    AutoGenerateColumns="False"
    ItemsSource="{Binding ListeLigne}"
    SelectedItem="{Binding CurrentLigne, Mode=TwoWay}"
    SelectionMode="Multiple" >

我建议您阅读MSDN上的页面,以便更好地了解数据绑定。现在,我可以给你一些建议。首先,在WPF中,您的属性应该真的使用了,如下所示:

private ObservableCollection<Ligne> _ListeLigne = new ObservableCollection<Ligne>();
public ObservableCollection<Ligne> ListeLigne
{
    get { return _ListeLigne; }
    set
    {
        _ListeLigne = value;
        OnPropertyChanged("ListeLigne");
    }
}
private Ligne _CurrentLigne = new Ligne();
public Ligne CurrentLigne
{
    get { return _CurrentLigne; }
    set
    {
        _CurrentLigne= value;
        OnPropertyChanged("CurrentLigne");
    }
}
有了这样的属性,您的XAML就可以了。最后,要添加项目,只需执行以下操作:

ListeLigne = new ObservableCollection<Ligne>(SomeMethodGettingYourData());
。。。如果您的数据访问方法返回一个
可观察集合
。如果要在UI中选择特定元素,则必须从数据绑定集合中选择一个实际项目,但可以使用
LinQ
轻松完成此操作

using System.Linq;

CurrentLigne = ListeLigne.First(l => l.SomeLigneProperty == someValue);
或者只是:

CurrentLigne = ListeLigne.ElementAt(someValidIndexInCollection);

哦。。。我还有一个建议给你。在代码中:

foreach (Ligne ligne in CurrentLigne)
{
    if (Currentligne!= null)    // this is a pointless if condition
    _ligneBLL.InsetLigne(ligne);
}

上面的
if
条件是没有意义的,因为如果集合为
null

,程序执行将永远不会进入
foreach
循环。我认为您需要使用绑定列表。这是我经常使用的列表,但请记住,您需要发布您的notifyChange事件。

试试这个

foreach (Ligne ligne in ListLigne) 
 {
   var _ligne = ligne as Ligne;   
   _ligneBLL.InsetLigne(ligne); 
 }

通常我使用
.AddRange()
一次向列表中添加多个项目。我是否可以将列表绑定到SelectedItem@sheridan,因为我想同时添加多行所选项目只能是数据绑定集合中的实际项目。因此,如果数据绑定集合中的每个项目都是
IList
,则您只能使用
IList
作为所选项目。能否请您解释更多@sheridanPerhaps我应该辞职,免费成为您的私人导师?这个网站不是教用户新的语言,也不是提供教程。您需要阅读一些在线教程和MSDN的许多页面。请为您的答案添加解释,以便OP更好地理解问题
foreach (Ligne ligne in ListLigne) 
 {
   var _ligne = ligne as Ligne;   
   _ligneBLL.InsetLigne(ligne); 
 }