Дополнительная информация @Steven. Вы ответите в своем UserControl: DependencyProperty
. Определение DependencyProperty
позволяет получать уведомления об изменениях для запуска обновлений для ваших элементов управления.
В коде вашего UserControl вы можете добавить свойство зависимости.
public partial class MyUserControl : UserControl
{
public string TextBlockText
{
get { return (string)GetValue(TextBlockTextProperty); }
set { SetValue(TextBlockTextProperty, value); }
}
public static readonly DependencyProperty TextBlockTextProperty =
DependencyProperty.Register("TextBlockText", typeof(string), typeof(MyUserControl), new UIPropertyMetadata(""));
public MyUserControl()
{
InitializeComponent();
DataContext = this;
}
}
Это подвергает публичной DependencyProperty
которые можно связать в XAML вашего UserControl в.
<UserControl>
<TextBlock Text="{Binding Path=TextBlockText}" />
</UserControl>
Теперь вам нужен способ установить это свойство из окна управления окном. Я подробно три способа, которыми вы можете сделать это:
1.) Поскольку свойство TextBlockText
выставляется на UserControl мы можем установить его непосредственно в XAML как:
<Window x:Class="WpfApplication2.MainWindow"
xmlns:local="clr-namespace:WpfApplication2">
<local:MyUserControl TextBlockText="Text that you want to set.">
</local:MyUserControl>
</Window>
2.) Если мы даем UserControl имя мы можем изменить свойство в окне кода-позади:
<Window x:Class="WpfApplication2.MainWindow"
xmlns:local="clr-namespace:WpfApplication2">
<local:MyUserControl Name="CoolUserControl">
</local:MyUserControl>
</Window>
-
CoolUserControl.TextBlockText = "Text that you want to set.";
3.) Или, наконец, вы можете создать еще DependencyProperty
в коде кода Window
и привязать его к свойству зависимости UserControl
. Таким образом, всякий раз, когда вы обновляете свойство, значение в вашем коде Window
также изменит свойство зависимостей UserControl
. Это предпочтительный выбор, как @Steven, о котором вы говорили раньше, поскольку ваш код не должен знать о каких-либо элементах управления.
public partial class MainWindow : Window
{
public string UserControlText
{
get { return (string)GetValue(UserControlTextProperty); }
set { SetValue(UserControlTextProperty, value); }
}
public static readonly DependencyProperty UserControlTextProperty =
DependencyProperty.Register("UserControlText", typeof(string), typeof(MainWindow), new UIPropertyMetadata(""));
public MainWindow()
{
InitializeComponent();
DataContext = this;
UserControlText = "Text that you want to set.";
}
}
И связываться с нашим новым DependencyProperty
в окне XAML:
<Window x:Class="WpfApplication2.MainWindow"
xmlns:local="clr-namespace:WpfApplication2">
<local:MyUserControl TextBlockText="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}, Mode=FindAncestor}, Path=UserControlText}"></local:MyUserControl>
</Window>
Надеется, что это помогает!
можете ли вы дать небольшой пример о том, как это сделать? –
Читайте это: http: //www.codeproject.com/Articles/224230/Изучение использования зависимостей-свойств-в-пользователе –
Посмотрите на эту привязку данных [пример] (http://code.msdn.microsoft.com/windowsapps/Data-Binding- 7b1d67b5) –