سؤال

أتعلم حاليًا كيفية تطوير وإنشاء تطبيق لنظام التشغيل Windows Phone 7.

إذا كانت قيمة معينة صحيحة ، فأنا بحاجة إلى إضافة textblock إلى قائمة القائمة قبل أن يكون نصًا (قل اسمه هو 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 مثل SO:

<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 مثل SO:

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top