Добавление текстового блока перед другим элементом в списке

StackOverflow https://stackoverflow.com/questions/4401297

Вопрос

В настоящее время я учусь разработать и создавать приложение для Windows Phone 7.

Если определенное значение верно, мне нужно добавить текстовыйБлок к списку перед текстовым блоком (скажем, его имя x:Name="dayTxtBx").

Я сейчас использую

dayListBox.Items.Add(dayTxtBx);

добавить текстовое поле.

Любая помощь очень ценится!

Спасибо

Это было полезно?

Решение

Это довольно легко сделать, если вы используете DataTemplate и ValueConverter и передаю весь объект в списку (а не просто строку). Предполагая, что у вас есть какой-то объект, который выглядит:

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>

Тогда у вас может быть список ListBox определен в XAML, так как:

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

Может показаться много, но это действительно довольно просто, как только вы начнете. Отличный способ узнать больше о привязке и преобразователях данных в блоге Джесси Либерти ( http://jesseliberty.com/?s=windows+Phone+from+scraitch. ).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top