Пожалуйста, объясните фактические различия между 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/>
Благодарю.
ContentControl фактически унаследован от класса Control. Из-за этого проблема не возникает из-за этого. Механизм Property Changed будет работать, когда значение свойства действительно изменится. Если новое значение и старое значение равны, нет необходимости обновлять ViewModel.
Кроме того, класс Control является базовым классом для большинства элементов пользовательского интерфейса в WPF. Он содержит свойства, такие как Background, Foreground, Font и т.д.
ContentControl - это класс, который представляет элемент, который может принимать отдельный элемент как дочерний. Например, ListBoxItem, ComboBoxItem и т.д. Являются ContentControls.