0

**更新しました**

皆さんが私を助けてくれることを願っていますが、ブレンドでwp7プロジェクトを開き、リストボックスアイテムテンプレートを編集して終了するという問題が発生していますが. すべてを保存し、VS2010 for Windows phone に戻り、デバッグを押しますが、電話を見て、アイテムがまったく表示されません。リストボックスは空白です。

コード:

<ListBox  toolkit:TiltEffect.IsTiltEnabled="True" x:Name="ListBox1" FontSize="42.667" FontFamily="Segoe WP SemiLight" IsSynchronizedWithCurrentItem="False" d:LayoutOverrides="VerticalAlignment">
    <ListBox.ItemTemplate>
       <DataTemplate>
          <StackPanel x:Name="sp">           
    <toolkit:ContextMenuService.ContextMenu>
   <toolkit:ContextMenu IsZoomEnabled="False" > 
  <toolkit:MenuItem Header="Delete" Click="Delete_Click" Name="MenuItem1" />
  <toolkit:MenuItem Header="Edit" Click="Edit_Click"/>
    <toolkit:MenuItem Header="View" Click="View_Click"/>
  <toolkit:MenuItem Header="Share.." Click="Share_Click"/>
</toolkit:ContextMenu>

簡単な概要 私が作成しているアプリは、メモを分離ストレージ内のフォルダーに保存するシンプルなメモ アプリです。アイテムを正常に取得しますが、タイトルと簡単な説明を付けたいだけです。こちらはオールインワンアイテム。私はその時点に達し、2 つのテキストブロックには ="{Binding}" があります。これは基本的に、私が想定しているタイトルを追加するだけですが、2 番目のテキストブロックに ="{Binding}" も追加したので、基本的にタイトルが表示されます両方とも。特定のアイテムにバインドする方法はありますか? 2番目のテキストブロックのように、テキストファイル内の最初の12文字を表示するようにバインドするにはどうすればよいですか?基本的にタイトルと簡単な説明のみを表示しますか?

4

1 に答える 1

0

おそらく、デザインタイムのみのデータがありますか?Mvvm Light DataService アプローチを使用している場合は、2 つの DataServices を定義します。1 つはデザインタイム用、もう 1 つはリアルタイム用です。

ランダムに仮定します。いくつかのサンプルを見るといいでしょう。

UPD: 間違ったコードを投稿しました。これは ContextMenu に関するものです。そこに束縛は見られません。

しかし、繰り返しになりますが、一般的に言えば、問題はないはずです。データをモデルに逆シリアル化するだけです。

public class Note
{
public string Name {get; set; }
public string Content; {get; set; }
}

そして、List (または、名前の変更などのリアルタイムの変更が必要な場合は ObservableCollection ) があります。そして、あなたはただバインドします

<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding Content}"/>

Content/Description を 12 文字に厳密に制限したい場合は、Converter を追加して最初の 12 文字のみを使用するか、新しいプロパティを導入することができます。

class Note 
{
***
public string Description { get { return Content.Substring(0, 12); } }
}

UPD2: わかりました、最初から始めましょう。まず、MVVM は Wp7 アプリケーションの推奨パターンです。自分で情報をグーグルで検索できると思いますが、最も重要な部分は次のとおりです。

  • モデル。データを保持します(あなたの場合、メモの名前と説明です)。
  • ビューモデル。これは抽象的な見方です。ここにはすべてのロジックがあり、ここでレンダリングする準備ができているすべてのデータがありますが、VM にはデータをレンダリングする方法がわかりません。あなたの場合、メモのリストはここにあります。
  • 意見。これがあなたのUIの説明です。あなたの場合、ListBox はここにあります。

    1. したがって、最初に新しいプロジェクトを作成し、次に NuGet を使用して最新の Mvvm Light をインストールします (たとえば)。インストール後、ビューモデルとモデルのフォルダーが表示されます。

    2. 前に説明したように、新しいクラス Note を作成します。それはあなたのモデルになります。

    3. 次に、ビューモデルに移動します。コンストラクターで、そこにメモのリストを追加し、それを ListOfNotes と呼びます。リストにいくつかの項目を手動で追加して初期化します (名前と内容のフィールドにランダムな値を追加します)。

    4. では、ご覧ください。ファイルの先頭に、DataContext = "{Binding MainViewModel, Source={StaticResource ViewModelLocator}}" のようなものがあるはずです。ビュー内に ListBox を追加します。それは次のようなものでなければなりません

               <ListBox ItemsSource="{Binding ListOfNotes}" >
                      <ListBox.ItemTemplate>
                          <DataTemplate>
                                  <StackPanel Orientation="Vertical">                                            
                                      <TextBlock Text="{Binding Name}" />
                                      <TextBlock Text="{Binding Content}" />
                                  </StackPanel>
                          </DataTemplate>
                      </ListBox.ItemTemplate>
                  </ListBox>
      

さて、これからどうなるか。アプリを実行すると、ビューが初期化されます。MainViewModel を取得します (手順 4 で DataContext として設定されているため)。MainViewModel のコンストラクターでは、ListOfNotes が初期化されます (手順 3 を参照)。次に、ページが ListBox をロードするときに、DataContext (この場合は MainViewModel) 内で ListOfNotes を見つけようとします。Notes のリストが検索され、ListBox のすべての要素が ListOfNotes のすべての要素に関連付けられます。DataTemplate に記述されているように、Note.Name と Note.Content を取得しようとします。

于 2013-10-22T05:53:29.280 に答える