Я хотел создать элемент управления с TextBox и связать свойство TextBox.Text со своим собственным свойством зависимости TextProp . (Своего рода эксперимент) Однако привязка не работает! Что я делаю не так?
XAML:
<UserControl x:Class="WpfApplication1.UserControl1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:WpfApplication1"> <TextBox Text="{Binding TextProp}" x:Name="textb"/> </UserControl>
C #:
public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); TextProp = "fwef"; } public string TextProp { get { return ( string )GetValue(TextPropProperty); } set { SetValue(TextPropProperty, value); } } public static readonly DependencyProperty TextPropProperty = DependencyProperty.Register("TextProp",typeof( string ),typeof(UserControl1)); }
Похоже, вы забыли установить DataContext , откуда Binding может получить фактическое свойство ...
Попробуйте выполнить одно из следующих действий:
C #
public UserControl1() { InitializeComponent(); TextProp = "fwef"; DataContext = this; }
Или
<UserControl x:Class="WpfApplication1.UserControl1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:WpfApplication1" DataContext="{Binding RelativeSource={RelativeSource Self}}"> <TextBox Text="{Binding TextProp}" x:Name="textb"/> </UserControl>
Или 2
<UserControl x:Class="WpfApplication1.UserControl1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:WpfApplication1"> <TextBox DataContext="{Binding RelativeSource={RelativeSource FindAncestory, AncestorType={x:Type local:UserControl}}} Text="{Binding TextProp}" x:Name="textb"/> </UserControl>
Я написал это с головы, надеюсь, я не сделал здесь опечатку.
Надеюсь, это поможет,
Приветствие.