Часто, когда я видел этот вопрос, я отвечал: «Вы должны сделать это в коде», что звучало для меня как «Привязка Silverlight не поддерживает это» - так что вы должны это сделать » полностью вручную ', установив свойство вручную. Но это не так:
Связывание Silverlight поддерживает это - это просто Silverlight XAML, который не поддерживает.
Вот пример UserControl
, который в основном оборачивает DataForm
. В конструкторе вы запускаете привязку, которая может привязываться к вашему «свойству пользовательского элемента управления». Надеюсь, если в будущем они изменят поддержку XAML для этого, будет просто вернуться и исправить это.
App.xaml
<AddressControl MyHeader="Shipping Address"/>
AddressControl.xaml
<UserControl>
<DataForm Name="dfAddress" Header="BOUND IN CODE"/>
</UserControl>
Необязательно: указывает, что вы связали значение в коде с комментарием
AddressControl.xaml.cs
publicAddressControl()
{
InitializeComponent();
// bind the HeaderProperty of 'dfAddress' to the 'MyHeader' dependency
// property defined in this file
dfAddress.SetBinding(DataForm.HeaderProperty,
new System.Windows.Data.Binding { Source = this,
Path = new PropertyPath("MyHeader") });
}
// standard string dependency property
public string MyHeader
{
get { return (string)GetValue(MyHeaderProperty); }
set { SetValue(MyHeaderProperty, value); }
}
public static readonly DependencyProperty MyHeaderProperty =
DependencyProperty.Register("MyHeader", typeof(string),
typeof(AddressControl), null);
Это связывает свойство MyHeader
в моем AddressControl
usercontrol со свойством Header
в форме данных. Я сделал его «Моим» исключительно для удобства чтения, но на самом деле я использую только «Заголовок» в своем реальном коде.
Настоящий позор, что мы до сих пор не можем сделать это в XAML, но это лучше, чем то, что я сначала попытался: захватить события DataContextChanged
, а затем вручную установить все.