0

我想将 Xceed DataGridControl 与 Caliburn Micro 绑定。设置绑定的最佳方法是什么,我想在我的视图模型中使用没有 ICommands 的 Caliburn 样式方法。在 Enter-Key 或在网格中双击它应该调用方法OpenContract(Contract c)

看法:

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

视图模型:

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

1 回答 1

0

原来绑定可以用caliburn完成(见这个讨论)

<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>
于 2013-10-02T16:07:26.820 回答