我刚刚开始使用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" >
答案 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事件。