请解释 Control和ContentControl 之间的实际差异,因为Google搜索没有取得好成绩。
实际上,我面临一个与此相关的问题: 我有一个自动完成框控件(继承自 ContentControl )。对于用户输入的新值,相应的Property的 Mode = TwoWay 工作正常,Property的值在ViewModel中更新,如果用户输入另一个新值,则重复相同。但是,如果用户再次输入先前输入的值,则不会更新属性的值。
所以我猜这可能是自动完成框控件应该继承自控件类而不是 ContentControl 。
我是否正确?请添加您的输入和反馈。
编辑 - 添加伪代码::
控件类: -
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));
}
视图模型: -
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 :(得分:1)
ContentControl实际上是从Control类继承的。因此,问题不会出现。当属性值真正改变时,属性改变机制将起作用。如果新值和旧值相等,则无需更新ViewModel。
除此之外,Control类是WPF中大多数UI元素的基类。它包含背景,前景,字体等属性
ContentControl是一个表示元素的类,可以接受单个项目作为子项。例如,ListBoxItem,ComboBoxItem等是ContentControls。