Я создаю простой пример UserControl с DependencyProperties, чтобы свойства элемента управления можно было изменить в XAML (код ниже).
Но, конечно, в моем приложении я не хочу, чтобы этот элемент управления имел тесно связанный код, но вместо этого пользовательский элемент управления будет представлением с именем «DataTypeWholeNumberView» и будет иметь собственный ViewModel с именем «DataTypeWholeNumberViewModel».
Итак, я собираюсь реализовать логику DependencyProperty ниже в ViewModel, но в ViewModels я обычно наследую INotifyPropertyChanged, который, кажется, дает мне ту же функциональность.
Так какова связь между:
- привязка DataContext из UserControl XAML к его коду за , который имеет свойства DependencyProperties
- привязка DataContext XAML (View) UserControl к его ViewModel (который наследуется от INotifyPropertyChanged) и имеет свойства, которые реализуют функциональность INotifyPropertyChanged?
XAML:
<UserControl x:Class="TestDependencyProperty827.SmartForm.DataTypeWholeNumber"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel>
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Orientation="Horizontal">
<TextBlock Text="{Binding Label}"/>
</StackPanel>
</StackPanel>
</UserControl>
Код сзади:
using System.Windows;
using System.Windows.Controls;
namespace TestDependencyProperty827.SmartForm
{
public partial class DataTypeWholeNumber : UserControl
{
public DataTypeWholeNumber()
{
InitializeComponent();
DataContext = this;
}
public string Label
{
get
{
return (string)GetValue(LabelProperty);
}
set
{
SetValue(LabelProperty, value);
}
}
public static readonly DependencyProperty LabelProperty =
DependencyProperty.Register("Label", typeof(string), typeof(DataTypeWholeNumber),
new FrameworkPropertyMetadata());
}
}