Невозможно связать UserControl из основного представления - PullRequest
3 голосов
/ 27 февраля 2012

Я создал пользовательский элемент управления, который содержит TextBox и PasswordBox. RestrictedBox.xaml

<UserControl.Resources>
        <Converters:BoolToVisibilityConverter x:Key="boolToVisConverter" />
        <Converters:BoolToVisibilityConverter x:Key="boolToVisConverterReverse" />
    </UserControl.Resources>
    <Grid x:Name="LayoutRoot" Background="White" Width="Auto">
        <StackPanel Margin="5,5,5,5">
            <TextBox Text="{Binding TextValue}" Visibility="{Binding IsTextBox,Converter={StaticResource boolToVisConverter}}" BorderBrush="Green" />
            <PasswordBox Password="{Binding TextValue}" Visibility="{Binding IsTextBox,Converter={StaticResource boolToVisConverterReverse}}" BorderBrush="Red" />
        </StackPanel>
    </Grid>

RestrictedBox.xaml.cs

public partial class RestrictedBox : UserControl
    {
        public RestrictedBox()
        {
            InitializeComponent();
        }

        public string TextValue
        {
            get { return (string)GetValue(TextValueProperty); }
            set { SetValue(TextValueProperty, value); }
        }
        public static readonly DependencyProperty TextValueProperty = DependencyProperty.Register("TextValue", typeof(string), typeof(RestrictedBox), new PropertyMetadata(default(string)));

        public bool IsTextBox
        {
            get { return (bool)GetValue(IsTextBoxProperty); }
            set { SetValue(IsTextBoxProperty, value); }
        }
        public static readonly DependencyProperty IsTextBoxProperty = DependencyProperty.Register("IsTextBox", typeof(bool), typeof(RestrictedBox), new PropertyMetadata(default(bool)));
    }

Теперь я добавил пользовательский контроль над моим LoginView.xaml page

<control:RestrictedBox TextValue="Imdadhusen" IsTextBox="True"   />

Теперь я запускаю приложение, но TextValue = "Imdadhusen" не привязан к моему текстовому полю, а второе свойство IsTextBox установлено в True, что означает, что оно будетавтоматически скрывать поле ввода пароля.

Ответы [ 2 ]

2 голосов
/ 27 февраля 2012

Пожалуйста, установите ваш DataContext, потому что в пользовательском контроле он не понимает DataContext. Так что попробуйте это в вашем конструкторе.

 this.DataContext = this;

Может быть, это поможет вам ...

1 голос
/ 27 февраля 2012

UserControls не регистрируют себя как контекст данных автоматически, поэтому привязка внутри пользовательского элемента управления не будет иметь ничего для привязки.

Я добавил следующую строкуUserControl codebehind для включения привязки по умолчанию.

public RestrictedBox()
{
     InitializeComponent();
     this.DataContext = this;
}

Спасибо, Imdadhusen

...