Xamarin Forms devexpress网格 - 访问单元格

时间:2017-07-12 07:49:51

标签: c# xaml xamarin xamarin.forms devexpress

我使用带有devexpress网格的Xamarin Forms,它包含多行。 我希望能够获得所选行/单元格的值。我怎样才能做到这一点?

<ScrollView>
    <dxGrid:GridControl 
        x:Name="grid" 
        ItemsSource="{Binding materials}"
        AutoFilterPanelVisibility="true"
        IsReadOnly="true"
        SortMode="Multiple">
            <dxGrid:GridControl.Columns>
                <dxGrid:TextColumn 
                    FieldName="id" 
                    Caption = "ID" 
                    AutoFilterCondition="Contains"/>
                <dxGrid:TextColumn 
                    FieldName="description" 
                    Caption = "Material" 
                    AutoFilterCondition="Contains"/>
            </dxGrid:GridControl.Columns>
    </dxGrid:GridControl>
</ScrollView>

材质是一个简单的List,其中Material是一个简单的示例类,包含两个字符串属性(id,description)。

2 个答案:

答案 0 :(得分:1)

正如您在documentation中所看到的,您可以绑定属性SelectedRowHandle以恢复所选行:

  

当最终用户点击网格中的数据行时,该行将被选中。使用SelectedRowHandle属性获取或设置网格中当前选定的行。 SelectedDataObject属性返回一个对象,该对象指定在网格中选择的行所对应的数据源记录。更改网格选择后,将发生SelectionChanged事件。

我希望这可以帮到你。

答案 1 :(得分:1)

自己想出来:

<ScrollView>
    <dxGrid:GridControl 
        x:Name="grid" 
        ItemsSource="{Binding materials}"
        AutoFilterPanelVisibility="true"
        IsReadOnly="true"
        SortMode="Multiple"
        SelectedRowHandle="{Binding selectedRow, Mode=TwoWay}"
        SelectedDataObject="{Binding selectedRowObject, Mode=TwoWay}">
        <dxGrid:GridControl.Columns>
            <dxGrid:TextColumn 
                FieldName="description" 
                Caption = "Material" 
                AutoFilterCondition="Contains"/>
            </dxGrid:GridControl.Columns>
        </dxGrid:GridControl>
    </ScrollView>

视图模型:

private int SelectedRow;
public int selectedRow
    {
        set
        {
            if(SelectedRow != value)
            {
                SelectedRow = value;
                if(PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("selectedRow"));
                }
            }
        }
        get
        {
            return SelectedRow;
        }
    }

    private Object SelectedRowObject;
    public Object selectedRowObject
    {
        set
        {
            if (SelectedRowObject != value)
            {
                SelectedRowObject = value;
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("selectedRowObject"));
                    PropertyChanged(this, new PropertyChangedEventArgs("selectedRowDescription"));
                }
            }
        }
        get
        {
            return SelectedRowObject;
        }
    }

    private String SelectedRowDescription;
    public String selectedRowDescription
    {
        get
        {
            if(SelectedRowObject != null && SelectedRowObject is Material)
            {
                Material mat = (Material)SelectedRowObject;
                return mat.description;
            } else
            {
                return "-";
            }
        }
    }