bytesport Ответов: 2

Используйте свойства зависимостей с пользовательским contorl WP


Привет, может быть, все могут помочь мне со свойствами зависимостей и пользовательским элементом управления, этот элемент управления costum contians a grid, сетка должна быть создана программно - новые столбцы с кнопками и внешними элементами управления.
У меня есть свойства зависимости в этом пользовательском элементе управления, но когда я вызываю пользовательский элемент управления, сетка не меняется.

Кажется, проблема в том, что сетка находится в другой задаче? потому что ничего не будет создано в сетке, ни столбца, ни кнопки. Что я делаю не так?

Что я уже пробовал:

мое свойство зависимости :
public static DependencyProperty Symbol1Name =
          DependencyProperty.Register("Sym1Name", typeof(string), typeof(UserControl1), new FrameworkPropertyMetadata("test", OnSymbol1PropertyChanged))


public string Sym1Name
       {
           get { return (string)this.GetValue(UserControl1.Symbol1Name); }
           set { this.SetValue(UserControl1.Symbol1Name, value); }
       }

Функция onChange
private static void OnSymbol1PropertyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
       {
           UserControl1 ak = dependencyObject as UserControl1;
           ak.OnPropertyChanged("Symbol1Name");
           ak.OnSymbol1PropertyChanged(e);

}

функция для изменения. функция изменения работает в обычном приложении WPF
:
private void OnSymbol1PropertyChanged(DependencyPropertyChangedEventArgs e)
        {
            try
            {
                

                
                change(Sym1Name, 0);
                

            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

2 Ответов

Рейтинг:
20

Clifford Nelson

Не знаю, в чем ваша проблема, так как у вас нет достаточно для меня, чтобы сказать вам. Однако у вас есть DependencyProperty, и по какой-то причине вы также реализовали INotifyPropertyChanged. В этом нет необходимости. Должен быть в состоянии сделать все без DependencyProperty и просто реализовать INotifyPropertyChanged. Это может облегчить решение вашей проблемы, поскольку вам больше не придется иметь дело со статикой, когда вы справляетесь с изменением.


Рейтинг:
1

bytesport

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

public static readonly DependencyProperty Symbol1Name =
         DependencyProperty.Register("Sym1Name", typeof(string), typeof(UserControl1), new FrameworkPropertyMetadata(new string('t',10), OnSymbol1PropertyChanged));


public string Sym1Name
        {
            get { return (string) this.GetValue(Symbol1Name); }
            set { this.SetValue(Symbol1Name, value); }
        }


private static void OnSymbol1PropertyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
        {
            UserControl1 ak = dependencyObject as UserControl1;            
            ak.InitName(e,0);
        }

Эта следующая функция создает новый столбец с парой элементов.
public void InitName(DependencyPropertyChangedEventArgs e, int column)
       {
           string test = e.NewValue.ToString();


           ColumnDefinition c1 = new ColumnDefinition();
           newColumnDefinition(c1, test);
           newBoarder(column);
           newGraphic(column, test);
           CreateDynamicExpander(column);
           if (!istGerade(column)) Grid1.ColumnDefinitions[column].Width = new GridLength(0);
           Grid1.HorizontalAlignment = HorizontalAlignment.Stretch;
           Grid1.VerticalAlignment = VerticalAlignment.Top;

       }