我正在使用下面的转换器代码
namespace someAssembly.Converters
{
public class ValidateTextLengthConverter : 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;
}
}
}
这是我的Xaml
命名空间:
xmlns:converter="clr-namespace:someNamepsace.someAssembly.Converters;assembly=someAssembly"
资源:
<ContentPage.Resources>
<ResourceDictionary>
<converter:ValidateTextLengthConverter x:Key="validateLength" />
</ResourceDictionary>
</ContentPage.Resources>
用法:(编辑我添加了转换器引用的文本框)
<StackLayout HorizontalOptions="FillAndExpand">
<Label Text="Name:" />
<Entry x:Name="txtName" Text="{Binding Name}" HorizontalOptions="FillAndExpand" />
</StackLayout>
<Button x:Name="btnSave" Text="Save"
Command="{Binding SaveCommand}"
HorizontalOptions="EndAndExpand"
BackgroundColor="{x:Static local:ColorResources.ButtonColorTransparent}"
IsEnabled="{Binding Source={x:Reference txtName},
Path=Text.Length,
Converter={StaticResource validateLength}}" />
我的主要目的是在文本框长度仍为零时禁用按钮。似乎Converter或IsEnabled没有触发。我的代码有问题吗?
答案 0 :(得分:1)
哦,嗯,代码没有错。错误发生在我的Bindable属性中,其中值需要初始化。
自:
private string _Name = string.Empty; //<-- needs to be empty or "" string
public string Name
{
get { return _Name; }
set { SetProperty(ref _Name, value); }
}
要:
public DelegateCommand SaveCommand { get; private set; }
SaveCommand = new DelegateCommand(SaveItem, canExecute)
.ObservesProperty(() => this.Name)
.ObservesProperty(() => this.Title)
.ObservesProperty(() => this.Description);
public bool canExecute()
{
return !string.IsNullOrEmpty(this.Name) && !string.IsNullOrEmpty(this.Title) && !string.IsNullOrEmpty(this.Description);
}
private async void SaveItem()
{
//Put your saving logic here.
}
但是考虑到工作转换器,我选择使用DelegateCommand,因此我可以检查多个属性的长度。
echo '<td><a class="btn btn-primary" href="wystaw.php?skinName='. $key['weapon']. " " .$key['skin'] .'">Wystaw</a></td>';
答案 1 :(得分:0)
我认为你应该绑定到可绑定的Text属性,而不是它的长度。 然后你应该修改转换器来处理字符串而不是int。