在ListBox中的另一个元素之前添加TextBlock

时间:2010-12-09 17:35:11

标签: c# silverlight xaml windows-phone-7

我目前正在学习如何为Windows Phone 7开发和构建应用程序。

如果某个值为true,我需要在TextBlock之前将一个TextBlock添加到ListBox(比如它的名称为x:Name="dayTxtBx")。

我目前正在使用

dayListBox.Items.Add(dayTxtBx);

添加文本框。

非常感谢任何帮助!

由于

1 个答案:

答案 0 :(得分:3)

如果你使用DataTemplate和ValueConverter并将整个对象传递给ListBox(而不仅仅是一个字符串),这很容易做到。假设您有一些看起来像这样的对象:

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));
        }
    }
}

你可以制作一个看起来像的转换器:

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();
    }
}

将转换器添加到您的XAML中,如下所示:

<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>

然后你可以在XAML中定义ListBox,如下所示:

<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>

可能看起来很多,但一旦你开始,它真的很简单。了解有关数据绑定和转换器的更多信息的好方法是在Jesse Liberty的博客(http://jesseliberty.com/?s=Windows+Phone+From+Scratch)。