3 votes

Impossible de lier le UserControl à partir de la vue principale

J'ai créé un contrôle utilisateur qui contient TextBox et 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)));
    }

Maintenant, j'ai ajouté le contrôle d'utilisateur ci-dessus à mon LoginView.xaml page

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

Maintenant, j'exécute l'application mais la TextValue = "Imdadhusen" n'est pas liée à ma zone de texte et la deuxième propriété IsTextBox est définie sur True, ce qui signifie qu'elle cachera automatiquement la Passwordbox et la Textbox.

Toute aide serait appréciée !

Merci, Imdadhusen

2voto

Manoj Savalia Points 811

Veuillez définir votre DataContext car le contrôle de l'utilisateur ne comprend pas le DataContext. Essayez donc de le faire dans votre constructeur.

 this.DataContext = this;

Peut-être que cela vous aidera...

1voto

imdadhusen Points 768

Les contrôles d'utilisateur ne s'enregistrent pas automatiquement comme contexte de données, de sorte que la liaison à l'intérieur du contrôle d'utilisateur n'aura rien à lier.

J'ai ajouté la ligne suivante dans mon codebehind UserControl pour activer la liaison par défaut.

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

Merci, Imdadhusen

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X