【问题标题】:Not able to bind UserControl from main View无法从主视图绑定 UserControl
【发布时间】:2012-02-27 11:46:57
【问题描述】:

我创建了包含 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 页面

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

现在我运行应用程序,但 TextValue = "Imdadhusen" 没有与我的文本框绑定,并且第二个属性 IsTextBox 设置为 True,这意味着它将自动隐藏 Passwordbox else Textbox。

任何帮助将不胜感激!

谢谢, 伊姆达杜森

【问题讨论】:

    标签: mvvm silverlight-4.0 user-controls prism-4


    【解决方案1】:

    请设置您的 DataContext,因为在用户控制中它不理解 DataContext。 所以在你的构造函数中尝试这个。

     this.DataContext = this;
    

    这可能对你有帮助...

    【讨论】:

      【解决方案2】:

      UserControls 不会自动将自己注册为数据上下文,因此用户控件内部的绑定不会有任何要绑定的内容。

      我在 UserControl 代码隐藏中添加了以下行以启用默认绑定。

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

      谢谢, 伊姆达胡森

      【讨论】:

        猜你喜欢
        • 2013-12-13
        • 1970-01-01
        • 1970-01-01
        • 2014-04-02
        • 1970-01-01
        • 2019-09-02
        • 2021-06-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多