2012-10-27 138 views
0

我有一個小問題。背後XAML綁定代碼不起作用

代碼:

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

我有ListView的來源,這是在C#中被設置沒問題代碼,還有我的模板正在加載。但是,出現這種情況時,我跑我的應用程序:

Project name is not being displayed

正如你可以看到未顯示的項目名稱(Project.Name),但在我的ListView模板數據綁定,所以它應該工作。有人知道爲什麼我的數據綁定文本不工作?請幫忙。

+0

這不可能是WPF和地鐵。 – mydogisbox

+0

我想到的第一件事:你有沒有適當地設置ItemsSource?如果沒有Datacontext,綁定將失敗。 –

回答

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

您必須對公共屬性進行綁定!並使用類而不是結構。結構按值傳遞給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; 
    } 
} 
相關問題