2014-03-13 75 views
0

我必须在按钮单击时在网格中显示Observable Collection的内容。在按钮上单击(我知道可以使用Command绑定,但为简单起见,单击处理程序)集合应该填充并显示来自模型类的名称属性。将CustomClass的ObservableCollection绑定到网格

视图模型:

public class Sample 
    { 
     public ObservableCollection<SchoolModel> ModelCollection { get; set; } 

     public void GridMethod() 
     { 
      ModelCollection = new ObservableCollection<SchoolModel>(); 
      ModelCollection.Add(new SchoolModel() {Id=1, Name="ABC" }); 
      ModelCollection.Add(new SchoolModel() { Id = 2, Name = "PQR" }); 
      ModelCollection.Add(new SchoolModel() { Id = 3, Name = "DEF" }); 
     } 
    } 

型号:

public class SchoolModel : INotifyPropertyChanged 
    { 
     private int id; 
     private string name; 

     public int Id 
     { 
      get 
      { 
       return id; 
      } 
      set 
      { 
       id = value; 
       OnPropertyChanged("Id"); 
      } 
     } 

     public string Name 
     { 
      get 
      { 
       return name; 
      } 
      set 
      { 
       name = value; 
       OnPropertyChanged("Name"); 
      } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 

     public void OnPropertyChanged(string propertyName) 
     { 
      PropertyChangedEventHandler handler = this.PropertyChanged; 
      if (handler != null) 
      { 
       handler(this, new PropertyChangedEventArgs(propertyName)); 
      } 
     } 
    } 

查看:

<Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="auto"/> 
      <RowDefinition Height="auto"/> 
     </Grid.RowDefinitions> 

     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="auto"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 

     <Button Content="Click" Click="Button_Click" Grid.Row="0" Grid.Column="0"/> 

     <ItemsControl ItemsSource="{Binding ModelCollection}" Grid.Row="0" Grid.Column="1" > 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <UniformGrid Rows="{Binding Path=ModelCollection.Count}" Columns="{Binding Path=ModelCollection.Count}" /> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate > 
        <TextBlock Width="auto" Height="auto" Text="{Binding Path=Name}"/>      
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </Grid> 

任何想法?为什么Collection没有显示在网格中

+0

您设置了<'这将导致所有项目显示在单行中。你不想要“Count”或类似的平方根吗? – dkozl

+0

我想以格式显示结果(3 * 3)等 – user2323308

回答

0

在Sample class的构造函数中初始化集合,否则在加载时绑定将失败,直到您手动为ModelCollection提升PropertyChanged事件为止,它将不起作用。

或者:

public Sample() 
{ 
    ModelCollection = new ObservableCollection<SchoolModel>(); 
} 

OR

落实Sample类INPC以及在GridMethod()提高初始化逻辑后PropertyChanged事件。

public void GridMethod() 
    { 
     ModelCollection = new ObservableCollection<SchoolModel>(); 
     ModelCollection.Add(new SchoolModel() {Id=1, Name="ABC" }); 
     ModelCollection.Add(new SchoolModel() { Id = 2, Name = "PQR" }); 
     ModelCollection.Add(new SchoolModel() { Id = 3, Name = "DEF" }); 
     OnPropertyChanged("ModelCollection"); 
    } 
+0

无法获取OnPropertyChanged(“ModelCollection”)。编译错误OnPropertyChanged在当前上下文中不存在 – user2323308

+0

显然,您需要像在SchoolModel类中那样在类中添加方法。从INPC中导出并创建方法。 –

+0

@ user2323308 - 这是否适合您? –

相关问题