WP7:列表框项目模板在编辑时不起作用?

时间:2013-10-22 04:22:38

标签: windows-phone-7 templates listbox edit

** **修订

只是快点,希望你们可以帮助我,但我遇到这个问题,我在混合中打开我的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}”这基本上只是添加了我正在假设的标题,但我还将=“{Binding}”添加到第二个文本块,因此它基本上显示了标题他们都。有没有办法将它绑定到特定项目?像第二个文本块一样,我如何绑定它,以便它显示文本文件中的前12个字符,所以基本上它只显示标题和简要描述?

1 个答案:

答案 0 :(得分:0)

也许您只有设计时数据? 如果您使用的是Mvvm Light DataService方法,则可以定义2个DataServices:一个用于设计时,另一个用于实时。

随便假设。看到一些样品会很高兴。

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}"/>

如果您希望对12个字符的内容/描述有严格的限制,您可以添加转换器并仅添加12个第一个字符,或引入新属性

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

UPD2: 好的,让我们从一开始就开始吧。首先,MVVM是Wp7应用程序的推荐模式。我相信,你可以自己谷歌信息,但这里是最重要的部分:

  • 模型。保留您的数据(在您的情况下,它是注释名称和描述)。
  • 视图模型。这是抽象的观点。您拥有所有逻辑,您准备好在此处呈现所有数据,但VM不知道如何呈现数据。在您的情况下,会有一个注释列表。
  • 查看。这是你的ui的描述。在你的情况下,ListBox就在这里。

    1. 首先,创建一个新项目,然后使用NuGet安装最新的Mvvm Light(例如)。安装后,您应该看到视图模型和模型的文件夹。

    2. 创建新类注意,就像我之前描述的那样。这将是你的模特。

    3. 现在,转到viewmodel。在构造函数中,在那里添加Notes列表,将其命名为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中找到ListOfNotes(在我们的例子中是MainViewModel)。它应该找到你的Notes列表,然后,ListBox的每个元素都将与ListOfNotes的每个元素相关联。正如DataTemplate中所描述的那样,它会尝试获取Note.Name和Note.Content。