Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在长列表选择器中使用控件_C#_Windows Phone 7_Windows Phone 8_Longlistselector_Windows Phone 8.1 - Fatal编程技术网

C# 在长列表选择器中使用控件

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访问器永远不会被命中。 希望我想要达到的目标是明确的 是否可以在绑定到的属性中调用功能,如我的控件中所示 如果没有,是否可以访问被绑定的控件并以这种方式调

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

  • 访问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)
    {
    //为列表中的每个对象向包裹面板添加新控件
    }
    }
    }
    

    希望它能帮助您解决您的问题。非常棒,这非常有效,甚至可以帮助我的项目的其他方面。非常感谢!