#endregion
protected Group items;
- string _itemTemplate;
+ string _itemTemplate, _dataTest;
#region events
public event EventHandler<SelectionChangeEventArgs> SelectedItemChanged;
//but then i should test if null in msil gen
public Dictionary<string, ItemTemplate> ItemTemplates = new Dictionary<string, Crow.ItemTemplate>();
+ /// <summary>
+ /// Default item template
+ /// </summary>
[XmlAttributeAttribute][DefaultValue("#Crow.Templates.ItemTemplate.goml")]
public string ItemTemplate {
get { return _itemTemplate; }
else
NotifyValueChanged ("HasChildren", true);
}
+ /// <summary>
+ /// Use to define condition on Data item for selecting among ItemTemplates.
+ /// Default value is 'TypeOf' for selecting Template depending on Type of Data.
+ /// Other possible values are properties of Data
+ /// </summary>
+ /// <value>The data property test.</value>
+ [XmlAttributeAttribute][DefaultValue("TypeOf")]
+ public string DataTest {
+ get { return _dataTest; }
+ set {
+ if (value == _dataTest)
+ return;
+
+ _dataTest = value;
+
+ NotifyValueChanged("DataTest", _dataTest);
+ }
+ }
#endregion
public virtual List<GraphicObject> Items{ get { return items.Children; }}
NotifyValueChanged ("Data", data);
- lock (CurrentInterface.UpdateMutex)
+ //lock (CurrentInterface.UpdateMutex)
ClearItems ();
if (data == null)
page.Name = "page" + pageNum;
-// //reset size to fit in the dir of the stacking
-// //because items total size is forced to approx size
-// if (_gsList.Orientation == Orientation.Horizontal) {
-// page.Width = Measure.Fit;
- page.BindMember ("Height", "../HeightPolicy");
- page.BindMember ("Width", "../WidthPolicy");
-// } else {
-// page.Height = Measure.Fit;
-// page.BindMember ("Width", "../WidthPolicy");
-// }
-
for (int i = (pageNum - 1) * itemPerPage; i < pageNum * itemPerPage; i++) {
if (i >= data.Count)
break;
loadingTime.ElapsedMilliseconds, this.ToString());
#endif
}
+ string getItempKey(Type dataType, object o){
+ try {
+ return dataType.GetProperty (_dataTest).GetGetMethod ().Invoke (o, null).ToString();
+ } catch (Exception ex) {
+ return dataType.FullName;
+ }
+ }
protected void loadItem(int i, Group page){
GraphicObject g = null;
ItemTemplate iTemp = null;
Type dataType = data [i].GetType ();
+ string itempKey = dataType.FullName;
+
+ if (_dataTest != "TypeOf")
+ itempKey = getItempKey (dataType, data [i]);
- if (ItemTemplates.ContainsKey (dataType.FullName))
- iTemp = ItemTemplates [dataType.FullName];
+ if (ItemTemplates.ContainsKey (itempKey))
+ iTemp = ItemTemplates [itempKey];
else
iTemp = ItemTemplates ["default"];
g = iTemp.CreateInstance(CurrentInterface);
page.AddChild (g);
g.DataSource = data [i];
+ if (typeof(IBindable).IsAssignableFrom (dataType))
+ CompilerServices.ResolveBindings ((data [i] as IBindable).Bindings);
}
registerItemClick (g);