Silverlight数据绑定问题

时间:2011-06-09 22:21:45

标签: silverlight xaml data-binding boolean

我有一个TextBox(TextBoxConsumer),当TextBox.Text的长度大于3时,我想在我的UI中启用一个按钮,

我把它挖到了

  

的IsEnabled =“{结合   的ElementName = TextBoxConsumer,   路径= Text.Length}“

我的按钮的IsEnabled属性,但我不知道如何找到长度并将其转换为bool,具体取决于文本框的长度我该怎么做?

我想在Xaml中完全使用Binding而不是代码来代替代码

2 个答案:

答案 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中的两个模型属性。