Вы действительно хотите разместить свойство на View Model и использовать привязку XAML, но это еще одна история.
Как вы описали свой пример, сначала вам нужно реализовать свойство «FirstName» как свойство зависимостей, а не просто get/set. Here is a great code-snippet from Shawn Wildermuth, чтобы сохранить много ввода (есть одна опечатка в фрагменте, который вам нужно исправить - «($ type $) args. NewValue;« ... В объекте NewValue есть неправильный случай).
Вы можете связать в XAML с простым свойством get/set, но это односторонняя/одноразовая привязка и не будет обновляться с изменениями.
В коде для привязки требуются две вещи, которые необходимо установить.
- Установите DataContext элемента управления (или страницы) и
- Установите связывание данных в элементе управления.
Для примера вы упоминаете вы можете использовать код, подобный следующему (принимает на себя управление TextBox называется MyTextBox в Xaml):
using System.Windows;
using System.Windows.Controls;
namespace BindingCodeTest
{
public partial class BindingCode : UserControl
{
public string FirstName
{
get { return (string)GetValue(FirstNameProperty); }
set { SetValue(FirstNameProperty, value); }
}
// Using a DependencyProperty as the backing store for FirstName.
// This enables animation, styling, binding, etc...
public static readonly DependencyProperty FirstNameProperty =
DependencyProperty.Register("FirstName",
typeof(string),
typeof(BindingCode),
new PropertyMetadata(string.Empty,
new PropertyChangedCallback(OnFirstNameChanged)));
static void OnFirstNameChanged(object sender, DependencyPropertyChangedEventArgs args)
{
// Get reference to self
BindingCode source = (BindingCode)sender;
// Add Handling Code
string newValue = (string)args.NewValue;
}
public BindingCode()
{
InitializeComponent();
myTextBox.DataContext = this;
myTextBox.SetBinding(TextBox.TextProperty, new System.Windows.Data.Binding("FirstName"));
FirstName = "First name"; // Sample change
}
}
}
Если я правильно понял ваш новый вопрос правильно, вы хотите привязать к свойству кода-за использованием только интерфейс наложения? Без предварительной настройки datacontext для страницы я не думаю, что вы можете. –
+1, не вижу причины проголосовать. Хотя это не строгое программирование, оно по-прежнему актуально. – DMan
@HiTech Magic - я не возражаю, что единственный код будет устанавливать datacontext. – Erez