Детализация ответа @Steven You, в вашем 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>
Теперь вам нужен способ установить это свойство из элемента управления Window.Я опишу три способа, которыми вы можете сделать это:
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
в Window 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>
Надеюсь, это поможет!