2010-10-14 17 views
7

Qualcuno sa di esempi di codice validi dell'esempio di framework Caliburn o Caliburn Micro che illustrano le azioni di routing con gli elementi DataGrid?Silverlight, Caliburn, Actions and DataGrids

+0

Si dovrebbe segna la risposta, per fornire feedback per il resto della comunità. – RyBolt

+0

Proprio fatto. Grazie. – BuddyJoe

risposta

11

Questo esempio associa un'azione a ciascuna riga nel datagrid. L'azione è gestita sul viewmodel che è il datacontext per l'intera vista. Questo è stato realizzato in Micro, ma la sintassi è la stessa. Questo non usa l'associazione dati basata su convenzione.

La quota di competenza della vista è:

<sdk:DataGrid ItemsSource="{Binding Source}" 
       AutoGenerateColumns="False"> 
    <sdk:DataGrid.Columns> 
     <sdk:DataGridTemplateColumn Header="Action"> 
      <sdk:DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <Button Content="Do!" 
          cm:Message.Attach="Remove($dataContext)" /> 
       </DataTemplate> 
      </sdk:DataGridTemplateColumn.CellTemplate> 
     </sdk:DataGridTemplateColumn> 
     <sdk:DataGridTextColumn Binding="{Binding Text}" /> 
         <sdk:DataGridTextColumn Binding="{Binding More}" /> 
         <sdk:DataGridTextColumn Binding="{Binding Stuff}" /> 
    </sdk:DataGrid.Columns> 
</sdk:DataGrid> 

e la corrispondente ViewModel si presenta così:

public class ShellViewModel : IShell 
{ 
    public ShellViewModel() 
    { 
     Source = new ObservableCollection<MyRow>(
      new[] 
       { 
        new MyRow {Text = "A1", More = "B", Stuff = "C"}, 
        new MyRow {Text = "A2", More = "B", Stuff = "C"}, 
        new MyRow {Text = "A3", More = "B", Stuff = "C"}, 
        new MyRow {Text = "A4", More = "B", Stuff = "C"}, 
        new MyRow {Text = "A5", More = "B", Stuff = "C"}, 
       } 
      ); 
    } 

    public void Remove(MyRow row) 
    { 
     Source.Remove(row); 
    } 

    public ObservableCollection<MyRow> Source { get; set; } 
} 

public class MyRow 
{ 
    public string Text { get; set; } 
    public string More { get; set; } 
    public string Stuff { get; set; } 
} 

Il parametro speciale $ DataContext è discusso qui: http://caliburn.codeplex.com/wikipage?title=Parameters&referringTitle=Documentation