Ce
est assez facile à faire si vous utilisez un DataTemplate et un ValueConverter et passer tout l'objet dans la zone de liste (plutôt que juste une chaîne). En supposant que vous avez un objet qui ressemble à:
public class SomeObject: INotifyPropertyChanged
{
private bool mTestValue;
public bool TestValue
{
get {return mTestValue;}
set {mTestValue = value; NotifyPropertyChanged("TestValue");}
}
private string mSomeText;
public string SomeText
{
get {return mSomeText;}
set {mSomeText = value; NotifyPropertyChanged("SomeText");}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string name)
{
if ((name != null) && (PropertyChanged != null))
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
}
Vous pouvez faire un convertisseur qui ressemble à:
public class BooleanVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null && (bool)value)
return Visibility.Visible;
else
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Et ajoutez le convertisseur à votre XAML comme ceci:
<UserControl x:Class="MyProject.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyProject">
<UserControl.Resources>
<local:BooleanVisibilityConverter x:Key="BoolVisibilityConverter" />
<UserControl.Resources>
Ensuite, vous pourriez avoir le ListBox défini en XAML comme si:
<Listbox>
<Listbox.ItemTemplate>
<DataTemplate>
<StackPanel Orentation="Horizontal" >
<TextBlock Text="Only Show If Value is True" Visibility={Binding TestValue, Converter={StaticResource BoolVisibilityConverter}} />
<TextBlock Text="{Binding SomeText}" />
</StackPanel>
</DataTemplate>
</Listbox.ItemTemplate>
</Listbox>
Peut sembler beaucoup, mais c'est vraiment très simple une fois que vous avez commencé. Un excellent moyen d'en savoir plus sur la liaison de données et les convertisseurs est sur le blog de Jesse Liberty (http://jesseliberty.com/?s=Windows+Phone+From+Scratch).
Que signifie "avant"? _Above_ ou _à gauche de_? Aussi, je recommande de mieux utiliser Data Binding: http://msdn.microsoft.com/en-us/library/cc278072(VS.95).aspx –
ci-dessus. Existe-t-il un moyen d'utiliser la liaison de données et insérer une zone de texte lorsque la valeur d'un élément change? – Jamie