Comme les types ne sont pas compatibles (et vous voulez généralement éviter code-behind/propriétés de dépendance) une « chaîne à convertisseur activé » est votre meilleur pari pour ce type de vérification simple.
Comme convertisseurs sont partagés autour de projets, et ne sont qu'une entrée mineure dans le XAML (et aucune modification de code-behind) vous ne devriez pas être inquiet sur l'utilisation de convertisseurs ... convertisseurs sont vos amis :)
Commencez à créer une bibliothèque de convertisseurs utiles car les mêmes types de problèmes se produisent à maintes reprises.
est ici un code minimal (pas de contrôle d'erreur) pour un convertisseur qui fait ce que vous vouliez:
using System;
using System.Windows.Data;
namespace LengthToEnabledTest
{
public class LengthToEnabledConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is string)
{
return (value as string).Length > 0;
}
throw new NotImplementedException();
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
}
et certains XAML de test correspondant (un simple panneau de pile avec 1 zone de texte et 1 bouton-poussoir):
<UserControl x:Class="TransitioningContentContolTest.LengthEnabledTest"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:converter="clr-namespace:LengthToEnabledTest"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<UserControl.Resources>
<converter:LengthToEnabledConverter x:Key="LengthToEnabledConverter"/>
</UserControl.Resources>
<StackPanel x:Name="LayoutRoot" Background="White">
<TextBox x:Name="textBox" />
<Button Content="Press me" Height="20" IsEnabled="{Binding Text, ElementName=textBox, Converter={StaticResource LengthToEnabledConverter}}"/>
</StackPanel>
</UserControl>