0

**更新**

只是一些快速的东西,希望你们能帮助我,但我遇到了这个问题,我在混合中打开我的 wp7 项目并编辑列表框项目模板并完成它但是。我保存了所有内容并返回到 Windows 手机的 VS2010 并点击调试,但我看着手机,根本没有任何项目出现。列表框只是空白。

代码:

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

快速简介 我正在制作的应用程序是一个简单的笔记应用程序,它将笔记保存到隔离存储中的文件夹中。它成功地检索了这些项目,但我只想让它具有标题和简短描述。这一切都在一个项目中。我已经到了这一点,两个文本块有 ="{Binding}" 这基本上只是添加了我假设的标题,但我还添加了 ="{Binding}" 到第二个文本块,所以它基本上显示了标题两个都。有没有办法将它绑定到特定项目?像第二个文本块一样,我如何绑定它以便它在文本文件中显示第一个 12 个字符,所以基本上它只显示标题和简短描述?

4

1 回答 1

0

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

只是随机假设。很高兴看到一些样品。

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 不知道如何呈现数据。在您的情况下,将在此处列出笔记列表。
  • 看法。这是您的用户界面的描述。在您的情况下, 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。它应该找到您的笔记列表,然后,ListBox 的每个元素都将与您的 ListOfNotes 的每个元素相关联。正如 DataTemplate 中所述,它会尝试获取 Note.Name 和 Note.Content。

于 2013-10-22T05:53:29.280 回答