XAML绑定代码无法正常工作

时间:2012-10-27 15:20:53

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

我的问题很小。

代码背后:

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

网格中的普通代码:

<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 is not being displayed

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

2 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:1)

你必须绑定公共属性!并使用类而不是结构。结构按值传递给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;
    }
}