【问题标题】:XAML TextBox isReadOnly BindingXAML 文本框 isReadOnly 绑定
【发布时间】:2016-01-17 05:31:24
【问题描述】:

我正在尝试使用 Windows 8.1 应用程序中的绑定将文本框设为只读。我尝试了一些来自互联网的代码,但它不起作用。 你能建议任何最简单的方法吗,我对绑定这个概念很陌生。

XAML

<TextBox x:Name="tbOne"  IsReadOnly="{Binding Path=setread, Mode=OneWay}" />
<Button Content="isReadonlyBinding" x:Name="isReadonlyBinding" Click="isReadonlyBinding_Click"></Button>

XAML.CS

public static readonly DependencyProperty IsReadOnlyProperty = DependencyProperty.Register(
    "setread",
    typeof(bool),
    typeof(MainPage),
    new PropertyMetadata(false)
    );

public bool setread
{
    get { return (bool)GetValue(IsReadOnlyProperty); }
    set { SetValue(IsReadOnlyProperty, value); }

}

private void isReadonlyBinding_Click(object sender, RoutedEventArgs e)
{
    setread = true;
}

【问题讨论】:

  • 您不需要在setread 上使用RaisePropertyChanged 吗?我不太确定它在 Windows 应用程序上的运行情况。

标签: c# xaml binding textbox windows-8.1


【解决方案1】:

试试这个。

<page X:name="PageName">
IsReadOnly="{Binding ElementName=PageName,Path=setread, Mode=OneWay}"

【讨论】:

  • 嗨,亚历克斯,太棒了。现在工作正常。你能告诉我为什么我们需要指定元素名称
  • 我的理解是你已经将“setread”定义为页面控件的属性,如果不指定元素,绑定会去其DataContext中查找“setread”。
【解决方案2】:

在您的代码后面实现INotifyPropertyChanged。然后修改属性如下:

private bool _setread;
public bool Setread
{
    get { return _setread; }
    set { 
      if(_seatread == value) return; 
      _setread = value;
      RaisePropertyChanged("Setread"); 
    }
}

为根元素命名,如x:Name="root",并使用ElementName=page 绑定到Setread。请注意,最好准备一个视图模型。隐藏视图模型代码只是一种快速解决方法。

【讨论】:

  • 编辑不使用DependencyProperty,因为它似乎不是强制性的。
  • 你能建议如何使用 INotifyPropertyChanged。我对此完全陌生。谢谢
  • 我希望复制和粘贴会起作用。 stackoverflow.com/questions/1315621/…
  • 而且,对不起,我的回答并不酷。正如 alex10 所建议的,您需要设置绑定源(请参阅编辑)。 ElementName=PageName 可能就足够了。不过,最好还是熟悉一下通知系统。
  • 两种方式都可以,而且亚历克斯肯定更简单。另外,DependencyProperty 通过 XAML 是可见的,你可以像&lt;YourCtrl IsReadOnly="true" ... /&gt; 这样控制值,即使你不喜欢它。另一方面,准备视图模型有点费力,但为您提供了更灵活的方式来设计控件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 2013-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多