2010-10-14 4 views
7

Wer kennt gute Codebeispiele des Caliburn- oder Caliburn Micro-Framework-Beispiels, die Routing-Aktionen mit DataGrid-Elementen veranschaulichen?Silverlight, Caliburn, Actions und DataGrids

+0

Sie sollten Markiere die Antwort, um Feedback für den Rest der Community zu geben. – RyBolt

+0

Habe gerade getan. Vielen Dank. – BuddyJoe

Antwort

11

In diesem Beispiel wird eine Aktion an jede Zeile im Datagrid angehängt. Die Aktion wird auf dem Ansichtsmodell behandelt, das der Datenkontext für die gesamte Ansicht ist. Dies wurde in Micro eingebaut, aber die Syntax ist die gleiche. Dies verwendet nicht die Konventionsbasierte Datenbindung.

Der relevante Teil der Ansicht ist:

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

und die entsprechende Ansichtsmodell sieht wie folgt aus:

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; } 
} 

Der spezielle Parameter $ Datacontext hier diskutiert wird: http://caliburn.codeplex.com/wikipage?title=Parameters&referringTitle=Documentation