В чем разница между Control и ContentControl в Silverlight / WPF?

1

Пожалуйста, объясните фактические различия между Control и ContentControl, поскольку поиск в Google не принесло хороших результатов.

На самом деле, у меня есть одна проблема, связанная с этим: у меня есть элемент управления Autocompletebox (наследующий от ContentControl). Для нового значения, введенного пользователем, соответствующий Property Mode = TwoWay работает нормально, а значение свойства обновляется в ViewModel и повторяется, если пользователь вводит другое новое значение. Но если ранее введенное значение снова вводится пользователем, тогда значение свойства не обновляется.

Поэтому я предполагаю, что этот элемент управления Autocompletebox может наследоваться из класса Control, а не ContentControl.

Правильно ли?, пожалуйста, добавьте свои материалы и отзывы.

EDIT - добавление псевдокода ::

Класс управления: -

public class MyAutoBox : ContentControl
{
    public int MyProp
    {
        get { return (int)GetValue(MyPropProperty); }
        set { SetValue(MyPropProperty, value); }
    }

    public static readonly DependencyProperty MyPropProperty =
      DependencyProperty.Register("MyProp", typeof(int), typeof(MyAutoBox), new PropertyMetadata(0));

}

ViewModel: -

public class MyViewModel : ViewModelBase, INavigationAware
{
    private int MyProp;

    public int MyProp
    {
        get { return MyProp; }
        set
        {
            if (MyProp != value)
            {
                MyProp = value;
                RaisePropertyChanged(() => MyProp);
            }
        }
    }

}

Xaml:

<MyControls:MyAutoBox Grid.Row="1"
                    Grid.Column="0"
                    Margin="10,0"
                    CanTypeIn="True"
                    MyProp="{Binding MyProp,  Converter={StaticResource NullToNumericConverter},Mode=TwoWay}"
<MyControls/>  

Благодарю.

  • 0
    Это не MS AutoCompleteBox. Это пользовательский элемент управления, разработанный нами, который наследуется от ContentControl.
Теги:
xaml
wpf
silverlight

1 ответ

1

ContentControl фактически унаследован от класса Control. Из-за этого проблема не возникает из-за этого. Механизм Property Changed будет работать, когда значение свойства действительно изменится. Если новое значение и старое значение равны, нет необходимости обновлять ViewModel.

Кроме того, класс Control является базовым классом для большинства элементов пользовательского интерфейса в WPF. Он содержит свойства, такие как Background, Foreground, Font и т.д.

ContentControl - это класс, который представляет элемент, который может принимать отдельный элемент как дочерний. Например, ListBoxItem, ComboBoxItem и т.д. Являются ContentControls.

  • 0
    Я приведу пример, допустим, я ввел 100, а затем удалил его; затем введите 200, 300 и т. д. до этого момента он работает нормально для каждого из этих значений. Но если я повторю любое из ранее введенных значений, скажем, 200, то в этот раз свойство не изменилось; из-за чего значение моего свойства в viewmodel не обновляется. Надеюсь, что это объясняет.
  • 0
    @xpertprogrammer было бы очень полезно, если бы вы могли воспроизвести проблему в некотором минимальном примере кода.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню