2013-10-02 3 views
0

Я хочу связать Xceed DataGridControl с Caliburn Micro. Каков наилучший способ настройки привязки, я хочу использовать методы стиля Caliburn без ICommands в моей модели представления. При вводе ключа или двойном щелчке в сетке он должен вызвать метод OpenContract(Contract c).Bind Xceed DataGridControl с Caliburn Micro

Вид:

<xcdg:DataGridControl ItemsSource="{Binding Contracts}" AutoCreateColumns="False"> 
    <xcdg:DataGridControl.InputBindings> 
     <KeyBinding Key="Enter" Command="{Binding Path=OpenContractCommand}" CommandParameter="{Binding ElementName=DataGrid, Path=SelectedItems}"/> 
     <MouseBinding MouseAction="LeftDoubleClick" Command="{Binding Path=OpenContractCommand}" CommandParameter="{Binding ElementName=DataGrid, Path=SelectedItems}"/> 
    </xcdg:DataGridControl.InputBindings> 
    <xcdg:DataGridControl.View> 
     <xcdg:TableView AllowColumnChooser="True" ShowFixedColumnSplitter="False" AllowRowResize="False" ShowRowSelectorPane="False" UseDefaultHeadersFooters="False" ColumnStretchMode="Last"> 
      <xcdg:TableView.FixedHeaders> 
       <DataTemplate> 
        <xcdg:ColumnManagerRow AllowColumnReorder="True" AllowSort="True" AllowColumnResize="True" AllowAutoFilter="False" /> 
       </DataTemplate> 
      </xcdg:TableView.FixedHeaders> 
     </xcdg:TableView> 
    </xcdg:DataGridControl.View> 
    <xcdg:DataGridControl.Columns> 
     <xcdg:Column FieldName="Name" Title="Name"></xcdg:Column> 
     <xcdg:Column FieldName="CustomerName" Title="Customer"></xcdg:Column> 
    </xcdg:DataGridControl.Columns> 
</xcdg:DataGridControl> 

ViewModel:

public class ContractViewModel : Screen 
{ 
    public BindableCollection<Contract> Contracts { get; private set; } 
    private ContractRepository _repository; 

    public ContractViewModel(ContractRepository repository) 
    { 
     _repository = repository 
    } 

    public async void OnViewLoaded() 
    { 
     Contracts.Clear(); 
     Contracts.AddRange(_repository.GetAll()); 
    } 

    public IEnumerable<IResult> OpenContract(Contract contract) 
    { 
     yield return; 
    } 
} 
+0

Вы приняли взглянуть на [All About Actions ] (https://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Actions&referringTitle=Documentation) Wiki. –

ответ

0

Оказывается, связывание может быть сделано с Caliburn (see this discussion):

<xcdg:DataGridControl ItemsSource="{Binding Contracts}" AutoCreateColumns="False"> 
    <xcdg:DataGridControl.Resources> 
     <Style TargetType="{x:Type xcdg:DataCell}"> 
      <Setter Property="cal:Message.Attach" Value="[Event PreviewMouseDoubleClick] = [Action OpenContract($this)]" /> 
     </Style> 
    </xcdg:DataGridControl.Resources> 
    <xcdg:DataGridControl.View> 
     <xcdg:TableView AllowColumnChooser="True" ShowFixedColumnSplitter="False" AllowRowResize="False" ShowRowSelectorPane="False" UseDefaultHeadersFooters="False" ColumnStretchMode="Last"> 
      <xcdg:TableView.FixedHeaders> 
       <DataTemplate> 
        <xcdg:ColumnManagerRow AllowColumnReorder="True" AllowSort="True" AllowColumnResize="True" AllowAutoFilter="False" /> 
       </DataTemplate> 
      </xcdg:TableView.FixedHeaders> 
     </xcdg:TableView> 
    </xcdg:DataGridControl.View> 
    <xcdg:DataGridControl.Columns> 
     <xcdg:Column FieldName="Name" Title="Name"></xcdg:Column> 
     <xcdg:Column FieldName="CustomerName" Title="Customer"></xcdg:Column> 
    </xcdg:DataGridControl.Columns> 
</xcdg:DataGridControl> 
+1

Ну, парень, который написал Caliburn Micro, также работал над dathagrid Xceed, поэтому он должен спросить :) – Charleh

Смежные вопросы