繁体   English   中英

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

[英]WP7: Listbox item template doesn't work when edited?

**更新**

很快,希望你们能为我提供帮助,但是我遇到了这个问题,我在混合状态下打开wp7项目,然后编辑列表框项目模板,但完成了。 我保存了所有内容,然后返回Windows Phone的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}”,所以它基本上显示了他们都。 有没有办法将其绑定到特定项目? 像第二个文本块一样,我该如何绑定它,使其在文本文件中显示第1个12个字符,因此基本上它仅显示标题和简短描述?

也许您只有设计时数据? 如果您使用的是Mvvm Light DataService方法,则定义两个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个字符进行严格限制,则可以添加Converter并仅输入12个首字符,或引入新属性

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

UPD2:好的,让我们从头开始。 首先,对于Wp7应用程序,推荐使用MVVM模式。 我相信,您可以自己搜索有关它的信息,但这是最重要的部分:

  • 模型。 保留您的数据(在您的情况下,它是注释名称和描述)。
  • ViewModel。 这是抽象视图。 您这里拥有所有逻辑,已经准备好在此处呈现所有数据,但是VM不知道如何呈现数据。 在您的情况下,注释列表将在此处。
  • 视图。 这是您的用户界面的说明。 就您而言,ListBox会在这里。

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

    2. 像我之前描述的那样创建新的类Note。 这将是您的模型。

    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(在我们的情况下为MainViewModel)中查找ListOfNotes。 它应该找到您的Notes列表,然后,ListBox的每个元素都将与ListOfNotes的每个元素相关联。 如DataTemplate中所述,它将尝试获取Note.Name和Note.Content。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM