2010-12-09 2 views
0

Я в настоящее время обучения, как разработать и создать приложение для Windows Phone 7.Добавление TextBlock перед другим элементом в ListBox

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

настоящее время я использую

dayListBox.Items.Add(dayTxtBx); 

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

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

Благодаря

+0

Что означает «раньше»? _Above_ или _ влево от_? Кроме того, я рекомендую лучше использовать привязку данных: http://msdn.microsoft.com/en-us/library/cc278072(VS.95).aspx – 2010-12-09 18:31:44

+0

выше. Есть ли способ использовать привязку данных и вставить текстовое поле при изменении значения элемента? – Jamie 2010-12-09 18:36:48

ответ

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> 

Тогда вы можете указать 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+Scratch).

Смежные вопросы