OnScanResult Zxing之后不显示Xamarin数据网格

问题描述 投票:0回答:1
  1. 我可以在扫描条形码后获得数据表,但是当我将其绑定到sfDatagrid时它不会显示。我究竟做错了什么。我想我叫vm.TimSPTonKho.Execute(null);在.cs中错误地代码xaml和.cs

<ContentPage.BindingContext>
        <vm:vmBanHang_get_TTSanPham_ScanCode />
    </ContentPage.BindingContext>
    <StackLayout>
        <Grid VerticalOptions="CenterAndExpand"
                  HorizontalOptions="CenterAndExpand">
            <zxing:ZXingScannerView x:Name="scanView"
                                        OnScanResult="scanView_OnScanResult"
                                        IsScanning="True"
                                        WidthRequest="200"
                                        HeightRequest="300"
                                        VerticalOptions="CenterAndExpand"
                                        HorizontalOptions="CenterAndExpand"/>
            <zxing:ZXingDefaultOverlay TopText="Align the barcode within the frame"/>
        </Grid>
        <datagrid:SfDataGrid HorizontalOptions="Center" x:Name="datagrid"
                                 AllowTriStateSorting="True" 
                                 ColumnSizer="Star"
                                 ItemsSource="{Binding DataTableCollection}">
        </datagrid:SfDataGrid>
    </StackLayout>
这是我的XAML文件
private void scanView_OnScanResult(Result result)
    {
        Device.BeginInvokeOnMainThread(async () =>
        {
            await DisplayAlert("Scanned result", "The barcode's text is " + result.Text + ". The barcode's format is " + result.BarcodeFormat, "OK");
            var vm = new vmBanHang_get_TTSanPham_ScanCode();
            vm.MaSanPham = result.Text;
            vm.IDCuaHang = 1;
            vm.TimSPTonKho.Execute(null);


        });

    }

我的ViewModel.cs

class vmBanHang_get_TTSanPham_ScanCode : INotifyPropertyChanged
{
    private ApiServices _apiServices = new ApiServices();
    public int IDCuaHang { get; set; }
    public string MaSanPham { get; set; }

    public vmBanHang_get_TTSanPham_ScanCode()
    {
        DataTableCollection = _DataTableCollection;
    }
    public DataTable DataTableCollection
    {
        get { return _DataTableCollection; }
        set
        {
            _DataTableCollection = value;
            OnPropertyChanged();
        }
    }

    public DataTable _DataTableCollection;


    public ICommand TimSPTonKho
    {
        get
        {
            return new Command(async () =>
            {
                if (!string.IsNullOrEmpty(MaSanPham))
                {
                    DataTableCollection = await _apiServices.get_TTSanPham_ScanCode(IDCuaHang, MaSanPham, Settings.Accesstoken);
                }

            });
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

2。我的第二个问题,我如何获得Datagrid发送到Datatable的所有值?我必须在xaml.cs或viewmodel中实现它吗?感谢您的帮助

xamarin.forms zxing zxing.net
1个回答
0
投票

我找到了解决方案。直接从xaml.cs绑定

datagrid.ItemsSource = await _apiServices.get_TTSanPham_ScanCode(1, result.Text, Settings.Accesstoken);

而不是在Viewmodel中调用Icommand

public ICommand TimSPTonKho
{
    get
    {
        return new Command(async () =>
        {
            if (!string.IsNullOrEmpty(MaSanPham))
            {
                DataTableCollection = await _apiServices.get_TTSanPham_ScanCode(IDCuaHang, MaSanPham, Settings.Accesstoken);
            }

        });
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.