1

ListBox 内にある Model.Person の List<> を使用しようとしました。スタイルに ItemTemplate を使用し、選択されたときにリストから正しい Model.Person を取得します。私はサンプル コードをあちこち探しました (そして主要なデータ バインディングを試みましたが、まだ適切に理解できていません)。

List<Model.Person> people = (comes from IsolatedStorageSettings)

ページには、「List」という名前の ListBox があります。

<ListBox Name="List"></ListBox>

私の C# コードでは、分離ストレージから List をプルします。私が理想的にやりたいことは、そのリスト内のすべての人が適切な形式で ListBox に表示され、1 つが選択されると、List<> から Person を簡単に取得することです。私が現在行っていること、そして確かに間違っているのは次のとおりです。

foreach (Model.Person person in people)
{
    List.Items.Add(person.firstName + " " + person.lastName);
}

次に、アイテムが選択されると、次の方法を使用して人を見つけます。

string selectedPerson = List.SelectedItem.ToString();
Model.Person person = people.Where(X => X.firstName + " " + X.lastName == selectedPerson).FirstOrDefault();

明らかに、アイテム内のリストはプレーン テキストとして表示されるだけであり、ItemTemplate を使用して作成するような興味深いオブジェクトではありません。誰かが私が間違っていることを教えてくれますか、これを達成するための良いリソースの方向を教えてくれますか?

本当にありがとう!

4

2 に答える 2

3

コードビハインドではなく、ビューで関連するものを表示したいのです。したがって、手動でリストにコードを入力するのではなく、ビューにバインドしてください。XAML は次のようになります。

<ListBox ItemsSource="{Binding Path=People}" SelectedItem="{Binding Path=SelectedPerson, Mode=TwoWay}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=FirstName}" />
                <TextBlock Text="{Binding Path=LastName}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

ページに明確な構造化 ViewModel を使用し、メンバーPeopleと選択した Person に 1 つを使用します。次のようになります。

public class YourPageViewModel : INotifyPropertyChanged
{
    public List<Model.Person> People { get; set; }

    private Model.Person _selectedPerson;
    public Model.Person SelectedPerson
    {
        get
        {
            return _selectedPerson;
        }
        set
        {
            if (_selectedPerson != value)
            {
                _selectedPerson = value;
                PropertyChangedEventHandler handler = this.PropertyChanged;
                if (handler != null)
                    handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}

次に、ビューのコード ビハインドでビューモデルを設定します。

public partial class MainPage : PhoneApplicationPage
{
    public MainPage()
    {
        InitializeComponent();

        this.Loaded += (s, e) =>
        {
            if (DataContext == null)
                DataContext = new YourPageViewModel();
        };
    }
}

ほら、あなたはMVVMアプローチを使用しており、代わりにコードビハインドからビューを作成しています。

IsolatedStorageSettingsまた、アプリの実際のデータを保存するために悪用しないことをお勧めします。モデル オブジェクトにシリアライザーを使用するか、Windows Phone 用のSQL コンパクトデータベースを使用してそれを行います。

于 2012-06-25T15:57:45.100 に答える
1

ObservableCollection<Person>の代わりに使用することもお勧めしList<Person>ます。リストには、ObservableCollection のような通知メカニズムが組み込まれていません。

于 2012-06-25T17:21:28.207 に答える