一次添加多行

时间:2014-06-16 17:26:28

标签: c# wpf mvvm telerik

我刚刚开始使用WPF和MVVM框架。我有一个带有telerik RadGridView的窗口,我想在同一时间从多行添加数据。有没有人得到任何建议或例子,我尝试了很多方法,但似乎没有任何方法。

谢谢

我的ViewModel

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);
}

我的观点

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

3 个答案:

答案 0 :(得分:1)

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

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());

或者只是......:

ListeLigne = SomeMethodGettingYourData();

...如果您的数据访问方法返回ObservableCollection<Ligne>。如果要在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条件毫无意义,因为如果集合为foreach,程序执行将永远不会进入null循环。

答案 1 :(得分:1)

试试这个!!

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

答案 2 :(得分:0)

我认为你想使用BindingList。这是我一直使用的列表,但请记住,您需要发布notifyChange事件。