C# 在长列表选择器中使用控件
我正在使用LongListSelector显示复杂对象的列表,并根据绑定对象列表属性中的项数更新datatemplate(控件)。 我试过以下方法C# 在长列表选择器中使用控件,c#,windows-phone-7,windows-phone-8,longlistselector,windows-phone-8.1,C#,Windows Phone 7,Windows Phone 8,Longlistselector,Windows Phone 8.1,我正在使用LongListSelector显示复杂对象的列表,并根据绑定对象列表属性中的项数更新datatemplate(控件)。 我试过以下方法 访问OnItemRealized事件中的数据,尝试获取绑定控件,并通过方法调用对其进行更新。 不确定是否可能 将属性添加到要绑定的控件,从而在设置属性时将控件添加到包裹面板。 控件属性中的set访问器永远不会被命中。 希望我想要达到的目标是明确的 是否可以在绑定到的属性中调用功能,如我的控件中所示 如果没有,是否可以访问被绑定的控件并以这种方式调
- 访问OnItemRealized事件中的数据,尝试获取绑定控件,并通过方法调用对其进行更新。 不确定是否可能
- 将属性添加到要绑定的控件,从而在设置属性时将控件添加到包裹面板。 控件属性中的set访问器永远不会被命中。
<DataTemplate x:Key="LLS_SomeTemplate" >
<MyApp:ObjectTemplate SomeObjects="{Binding SomeEntities}"/>
</DataTemplate>
正在绑定的对象
public class SomeObject
{
public ObservableCollection<Entities> _SomeEntities { get; set; }
public ObservableCollection<Entities> SomeEntities
{
get
{
if (_SomeEntities == null)
_SomeEntities = new ObservableCollection<Entities>();
return _SomeEntities;
}
set
{
_SomeEntities = value;
}
}
public SomeObject()
{
}
}
公共类SomeObject
{
公共可观测集合_someenties{get;set;}
公共可观测集合实体
{
得到
{
如果(_SomeEntities==null)
_SomeEntities=新的ObservableCollection();
返回一些实体;
}
设置
{
_某些实体=价值;
}
}
公共对象()
{
}
}
控件属性
public static DependencyProperty SomeObjectsProperty = DependencyProperty.Register("SomeObjects", typeof(ObservableCollection<Entities>), typeof(ObjectTemplate), new PropertyMetadata(new ObservableCollection<Entities>()));
public ObservableCollection<SomeObject> SomeObjects
{
get
{
return (ObservableCollection<SomeObject>)GetValue(SomeObjectsProperty);
}
set
{
SetValue(SomeObjectsProperty, value);
if (value != null && value.Count > 0)
{
foreach (SomeObject eLink in value)
{
//Add a new control to a wrap panel for each object in the list
}
}
}
}
public static dependencProperty SomeObjectsProperty=dependencProperty.Register(“SomeObjects”、typeof(ObservableCollection)、typeof(ObjectTemplate)、new PropertyMetadata(new ObservableCollection());
公共可观测收集对象
{
得到
{
返回(ObservableCollection)GetValue(SomeObjectsProperty);
}
设置
{
SetValue(SomeObjectsProperty,value);
if(value!=null&&value.Count>0)
{
foreach(值中的SomeObject eLink)
{
//为列表中的每个对象向包裹面板添加新控件
}
}
}
}
CLR设置依赖项属性的方法很少。必须避免在setter中执行操作。改为创建值已更改的事件处理程序:
public static DependencyProperty SomeObjectsProperty = DependencyProperty.Register("SomeObjects", typeof(ObservableCollection<Entities>), typeof(ObjectTemplate), new PropertyMetadata(new ObservableCollection<Entities>(), new PropertyChangedCallback(OnSomeObjectsPropertyChanged));
private static void OnSomeObjectsPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
(d as ObjectTemplate).UpdateSomeObjects(e.NewValue as SomeObjects);
}
public void UpdateSomeObjects(SomeObjects value)
{
if (value != null && value.Count > 0)
{
foreach (SomeObject eLink in value)
{
//Add a new control to a wrap panel for each object in the list
}
}
}
public static dependencProperty SomeObjectsProperty=dependencProperty.Register(“SomeObjects”、typeof(ObservableCollection)、typeof(ObjectTemplate)、new PropertyMetadata(new ObservableCollection()、new PropertyChangedCallback(OnSomeObjectsPropertyChanged));
SomeObjectsPropertyChanged上的私有静态无效(DependencyObject d、DependencyPropertyChangedEventArgs e)
{
(d作为ObjectTemplate)UpdateSomeObjects(例如,将NewValue作为SomeObject);
}
public void UpdateSomeObjects(SomeObjects值)
{
if(value!=null&&value.Count>0)
{
foreach(值中的SomeObject eLink)
{
//为列表中的每个对象向包裹面板添加新控件
}
}
}
希望它能帮助您解决您的问题。非常棒,这非常有效,甚至可以帮助我的项目的其他方面。非常感谢!