在LongListSelector中使用控件

本文关键字:控件 LongListSelector | 更新日期: 2023-09-27 18:03:20

我使用LongListSelector来显示复杂对象列表,并根据绑定对象列表属性中的项数更新数据模板(控件)。我试过以下方法。

  • 访问onitemrealize事件中的数据以尝试获取绑定控件并通过方法调用更新它。不确定是否可能
  • 向被绑定的控件添加一个属性,当该属性被设置时,将控件添加到换行面板。控件属性中的set访问器永远不会被命中。

希望你清楚我想要达到的目标。

  1. 是否可以调用被绑定的属性中的功能,如我的控件
  2. 所示
  3. 如果没有,是否可以访问被绑定的控件并以这种方式调用暴露的功能
如果有人能对我的问题提出任何建议,我将不胜感激!数据模板

<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()
    {
    }
}
控制性能得到了

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

在LongListSelector中使用控件

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

希望它能帮助你解决你的问题