Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Зависимое-свойство ObservableCollection слипается


Автор: 1datr 25.9.2014, 11:32
Код

<my1:CommonCtrlKirishi Rows="22" Floors="12">
                <my1:CommonCtrlKirishi.PointsEmptyLeft>
                    <my1:GridPoint X="0" Y="0" />
                    <my1:GridPoint X="0" Y="1" />
                    <my1:GridPoint X="0" Y="2" />
                    <my1:GridPoint X="0" Y="3" />
                    <my1:GridPoint X="0" Y="4" />
                    <my1:GridPoint X="0" Y="5" />
                    <my1:GridPoint X="0" Y="6" />
                    <my1:GridPoint X="0" Y="7" />
                    <my1:GridPoint X="0" Y="8" />
                    <my1:GridPoint X="0" Y="9" />
                    <my1:GridPoint X="0" Y="10" />                    
                </my1:CommonCtrlKirishi.PointsEmptyLeft>
                
                
            </my1:CommonCtrlKirishi>
        </TabItem>
        <TabItem Header="Штабелер 2">

            <my1:CommonCtrlKirishi StackerID="2" Rows="22" Floors="12">

                <my1:CommonCtrlKirishi.PointsEmptyLeft>
                    <my1:GridPoint X="0" Y="0" />
                    <my1:GridPoint X="0" Y="1" />
                    <my1:GridPoint X="0" Y="2" />
                    <my1:GridPoint X="0" Y="3" />
                    <my1:GridPoint X="0" Y="4" />
                    <my1:GridPoint X="0" Y="5" />
                    <my1:GridPoint X="0" Y="6" />
                    <my1:GridPoint X="0" Y="7" />
                    <my1:GridPoint X="0" Y="8" />
                    <my1:GridPoint X="0" Y="9" />
                    <my1:GridPoint X="0" Y="10" />
                    <my1:GridPoint X="0" Y="11" />
                </my1:CommonCtrlKirishi.PointsEmptyLeft>
                <my1:CommonCtrlKirishi.PointsEmptyRight>                   
                    <my1:GridPoint X="0" Y="1" />
                    <my1:GridPoint X="0" Y="2" />
                    <my1:GridPoint X="0" Y="3" />
                    <my1:GridPoint X="0" Y="4" />
                    <my1:GridPoint X="0" Y="5" />
                    <my1:GridPoint X="0" Y="6" />
                    <my1:GridPoint X="0" Y="7" />
                    <my1:GridPoint X="0" Y="8" />
                    <my1:GridPoint X="0" Y="9" />
                    <my1:GridPoint X="0" Y="10" />
                    <my1:GridPoint X="0" Y="11" />
                </my1:CommonCtrlKirishi.PointsEmptyRight>
            </my1:CommonCtrlKirishi>


Код

 // Dependency Property
        public static readonly DependencyProperty PointsEmptyLeftDP = DependencyProperty.Register("PointsEmptyLeft", typeof(ObservableCollection<GridPoint>), typeof(StackerControl), new FrameworkPropertyMetadata(new ObservableCollection<GridPoint>(),DepParamsChanged));
        // .NET Property wrapper
        [Description("Free points in left rack"), Category("Stacker")]
        public ObservableCollection<GridPoint> PointsEmptyLeft
        {
            get
            {
                return (ObservableCollection<GridPoint>)GetValue(PointsEmptyLeftDP);
            }
            set
            {
                SetValue(PointsEmptyLeftDP, value);

            }
        }

        // Dependency Property
        public static readonly DependencyProperty PointsEmptyRightDP = DependencyProperty.Register("PointsEmptyRight", typeof(ItemsChangeObservableCollection<GridPoint>), typeof(StackerControl), new FrameworkPropertyMetadata(new ItemsChangeObservableCollection<GridPoint>(), DepParamsChanged));
        // .NET Property wrapper
        [Description("Free points in right rack"), Category("Stacker")]
        public ItemsChangeObservableCollection<GridPoint> PointsEmptyRight
        {
            get
            {
                return (ItemsChangeObservableCollection<GridPoint>)GetValue(PointsEmptyRightDP);
            }
            set
            {
                SetValue(PointsEmptyRightDP, value);

            }
        }

 public void SetParam(String propname, Object val, object oldval)
        {
            switch (propname)
            {
               ...
                case "PointsEmptyLeft":
                    restruct_left();
                    set_cell_styles();
                    break;
                case "PointsEmptyRight":
                    restruct_right();
                    set_cell_styles();
                    break;
            }
        }

        private static void DepParamsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            StackerControl ctrl = (StackerControl)d;
            
            ctrl.SetParam(e.Property.Name, e.NewValue, e.OldValue);
             
        }


При этом в обеих контролах ячейки вырезаются одинаково и свойство там показывает такое, как будто там одна большая коллекция образуется для всех таких контролов.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)