我有一个TextBox(TextBoxConsumer),当TextBox.Text的长度大于3时,我想在我的UI中启用一个按钮,
我把它挖到了
的IsEnabled =“{结合 的ElementName = TextBoxConsumer, 路径= Text.Length}“
我的按钮的IsEnabled属性,但我不知道如何找到长度并将其转换为bool,具体取决于文本框的长度我该怎么做?
我想在Xaml中完全使用Binding而不是代码来代替代码
答案 0 :(得分:1)
我更喜欢使用IValueConverter类。我会提供一些快速的代码,虽然它不是你想要的,但你应该能够调整它。
在cs文件中:
using System;
using System.Globalization;
using System.Windows.Data;
public class IntCorrectAnswerToTrueFalseConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (int)value > 0;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return (bool)value ? 1 : 0;
}
}
在App.xaml中,将此行添加到ResourceDictionary:
<app:IntCorrectAnswerToTrueFalseConverter x:Key="IntCorrectAnswerToTrueFalseConverter" />
然后在你使用它的xaml中:
<CheckBox
x:Name="answerCheckBox"
IsChecked="{Binding Score, Converter={StaticResource IntCorrectAnswerToTrueFalseConverter}}"
Click="CheckBoxChecked"/>
答案 1 :(得分:0)
我使用INotifyPropertyChanged接口使用类似于this的教程做了类似的事情。我假设您有一个用于绑定到UI的模型。你有一个字符串成员(如TextBoxConsumerString)绑定到您的文本框。现在你需要添加一个类似TextBoxConsumerEnabled的布尔值,你将在TextBoxConsumerString的setter中设置它并调用notify changed方法。
this.OnPropertyChanged( new PropertyChangedEventArgs( "TextBoxConsumerEnabled" ) );
以下是一个例子:
public class TextBoxConsumerModel : INotifyPropertyChanged
{
private string _textBoxConsumerString;
public event PropertyChangedEventHandler PropertyChanged;
public string TextBoxConsumerString
{
get
{
return _textBoxConsumerString;
}
set
{
if (_textBoxConsumerString == value)
return;
TextBoxConsumerEnabled = value != null && value.Length > 3;
_textBoxConsumerString = value;
OnPropertyChanged(new PropertyChangedEventArgs("TextBoxConsumerEnabled"));
}
}
public bool TextBoxConsumerEnabled { get; set; }
protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
PropertyChanged(this, e);
}
}
就模型而言应该是这样。现在您只需要绑定XAML中的两个模型属性。