【问题标题】:XAML binding code not workingXAML 绑定代码不起作用
【发布时间】:2012-10-27 15:20:52
【问题描述】:

我有一个小问题。

后面的代码:

...
public struct Project
{
    string Name;
    string Path;
    public Project(string Name, string Path = "")
    {
       this.Name = Name;
       this.Path = Path;
    }
}
...

资源代码:

<DataTemplate x:Key="ItemProjectTemplate">
        <StackPanel>
            <Image Source="Assets/project.png" Width="50" Height="50" />
            <TextBlock FontSize="22" Text="{Binding Name}" />
        </StackPanel>
</DataTemplate>

Grid 中的普通代码:

<ListView Grid.Column="1" HorizontalAlignment="Left" Height="511" 
     Margin="25,72,0,0" Grid.Row="1" VerticalAlignment="Top" Width="423"
     x:Name="Projects" ItemTemplate="{StaticResource ItemProjectTemplate}" />

我对在 C# 代码中设置的 ListView 源没有问题,并且我的模板正在加载。但是当我运行我的应用程序时会发生这种情况:

如您所见,项目名称(Project.Name) 没有显示,但在我的 ListView 模板中是数据绑定,所以它应该可以工作。有谁知道为什么我的文本数据绑定不起作用?请帮忙。

【问题讨论】:

  • 这不能同时是 wpf 和 Metro。
  • 我想到的第一件事是:您是否正确设置了 ItemsSource?如果没有Datacontext,绑定会失败。

标签: c# wpf data-binding microsoft-metro datatemplate


【解决方案1】:

DataBinding 适用于 Properties 而不适用于 Fields。用类替换 Struct 并将您的字段设为属性-

public class Project
{
    public string Name {get; set;}
    public string Path {get; set;}
    public Project(string Name, string Path = "")
    {
       this.Name = Name;
       this.Path = Path;
    }
}

【讨论】:

    【解决方案2】:

    您必须绑定公共属性!并使用类而不是结构。结构按值传递给 GUI,因此您不能对实际的源项进行更改。

    public class Project
    {
        public string Name{ get; set;}
        public string Path{ get; set;}
        public Project(string Name, string Path = "")
        {
           this.Name = Name;
           this.Path = Path;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-09
      • 2018-09-24
      • 2016-10-31
      • 2014-06-13
      • 1970-01-01
      相关资源
      最近更新 更多