0

Xceed DataGridControl を Caliburn Micro にバインドしたいと考えています。バインディングをセットアップする最良の方法は何ですか。ビュー モデルで ICommand を使用せずに Caliburn スタイルのメソッドを使用したいと考えています。Enter キーを押すか、グリッドをダブルクリックすると、メソッドが呼び出されます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 に答える