Привязка WPS DataGrid ItemsSource не показывает данные при привязке данных в коде XAML - PullRequest
0 голосов
/ 01 октября 2018

DataGrid не показывает никакого значения, когда он связывается в коде представления XAML, даже если контекст данных окна определен в XAML, все остальные текстовые поля и привязка данных в выпадающем списке в том же представлении работают нормально, все эти свойства не вставлены в следующий код

Код представления

<Window x:Class="MegaSoft.Views.Windows.SaleInvoiceDetialWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:MegaSoft.Views.Windows"
        mc:Ignorable="d"
         d:DesignHeight="1500" d:DesignWidth="1200"
        xmlns:uc="clr-namespace:MegaSoft.UserControls"
        xmlns:vm="clr-namespace:MegaSoft.ViewModel"
        WindowState="Maximized"
        Title="Sale Invoice">
      <Window.DataContext>
        <vm:SaleInvoiceDetialViewModel x:Name="_SaleInvoiceDetialViewModel"/>
    </Window.DataContext>
<DataGrid MinHeight="300" MaxHeight="300" MaxWidth="1300" ItemsSource="{Binding Path=DataGridCollection,Mode=TwoWay,NotifyOnTargetUpdated=True,NotifyOnSourceUpdated=True,ValidatesOnDataErrors=True,UpdateSourceTrigger=PropertyChanged,ValidatesOnExceptions=True}" Name="SaleInvoiceDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" SelectionUnit="CellOrRowHeader" ColumnWidth="Auto" AutoGenerateColumns="False" CanUserAddRows="True" CanUserDeleteRows="True" CanUserReorderColumns="False" >
                        <DataGrid.Columns>
                            <DataGridTextColumn Header="Id" Visibility="Collapsed" Binding="{Binding Path=Id,Mode=OneWay ,ValidatesOnDataErrors=True,UpdateSourceTrigger=PropertyChanged,ValidatesOnExceptions=True}" Width="Auto" CanUserResize="False" ></DataGridTextColumn>
                            <DataGridTextColumn IsReadOnly="True" MaxWidth="100" Header="Sr. No"  Binding="{Binding Path=SRNo,Mode=OneTime ,ValidatesOnDataErrors=True,UpdateSourceTrigger=PropertyChanged,ValidatesOnExceptions=True}" CanUserResize="False"></DataGridTextColumn>


                        </DataGrid.Columns>
                    </DataGrid>
</Window>

Представление связывается с моделью представления, содержащей объект привязки DataGrid, некоторые и другие объекты ViewModel

 public class SaleInvoiceDetialViewModel : INotifyPropertyChanged, IDataErrorInfo
    {
     public ObservableCollection<SaleInvoiceDetialDataGridViewModel> DataGridCollection
        {
            get { return _DataGridCollection; }
            set
            {
                _DataGridCollection = value;
                OnPropertyChanged("DataGridCollection");
            }
        }
 #region PropertyChange
        //public event PropertyChangedEventHandler PropertyChanged;
        public event PropertyChangedEventHandler PropertyChanged;
        /// <summary>
        /// Implemantation of Property change interface
        /// </summary>
        /// <param name="property">Name of property</param>
        protected void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        #endregion
// other properties 

}

Датагрид показывает, что когда я пытаюсь это сделать

_FrmSaleInvoiceDetialWindow.SaleInvoiceDataGrid.ItemsSource = DataGridCollection ;

Но это не обязательно.это должно работать как обычное связывание в Xmal

ItemsSource="{Binding Path=DataGridCollection}"

SaleInvoiceDetialDataGridViewModel

       public class SaleInvoiceDetialDataGridViewModel : INotifyPropertyChanged     {
            GetGeneralData getData = new GetGeneralData();

            public static int CountSRN { get; set; } = 1;

            private int? _SRNO;
            public int? SRNo
            {
                get
                {
                    if (_SRNO.HasValue)
                    {
                        return ++_SRNO;
                    }
                    return _SRNO = CountSRN++;
                }
                set
                {
                    _SRNO = value;
                }
            }


            private int _Id;
            public int Id
            {
                get { return _Id; }
                set
                {
                    _Id = value;
                    OnPropertyChanged("Id");
                }
            }

            private int? _ItemAccountId;
            public int? ItemAccountId
            {
                get { return _ItemAccountId; }
                set
                {
                    _ItemAccountId = value;
                    OnPropertyChanged("ItemAccountId");
                    OnPropertyChanged("ProductName");
                    OnPropertyChanged("IsCatchWeight");
                    OnPropertyChanged("CWSize");
                    OnPropertyChanged("CWQty");
                    OnPropertyChanged("Unit");
                }
            }


            private string _ProductName;

            public string ProductName
            {
                get
                {
                    if (ItemAccountId.HasValue)
                        return _ProductName = ItemAccountList.Where(x => x.Id == _ItemAccountId).FirstOrDefault()?.ItemName;
                    return _ProductName;
                }
                set
                {
                    _ProductName = value;
                    OnPropertyChanged("ProductName");
                }
            }

            private bool? _IsCatchWeight;

            public bool? IsCatchWeight
            {
                get
                {
                    if (_ItemAccountId.HasValue)
                        return _IsCatchWeight = Convert.ToBoolean(_ItemAccountList.FirstOrDefault(x => x.Id == ItemAccountId)?.IsCatchWeightItem);
                    return _IsCatchWeight;
                }
                set
                {
                    _IsCatchWeight = value;
                    OnPropertyChanged("IsCatchWeight");
                }
            }



            private double? _CWSize;

            public double? CWSize
            {
                get
                {
                    //if (IsCatchWeight == true)
                    return _CWSize = _ItemAccountList?.FirstOrDefault(x => x.Id == ItemAccountId)?.CWSizeOrConversion;
                    //return _CWSize;
                }
                set
                {
                    _CWSize = value;
                    OnPropertyChanged("CWSize");
                    OnPropertyChanged("Quantity");
                    OnPropertyChanged("ActualPriceAfterDiscount");
                    OnPropertyChanged("NetAmount");
                }
            }

            private double? _CWQty;

            public double? CWQty
            {
                get
                {
                    if (IsCatchWeight != true)
                        return _CWQty = null;
                    return _CWQty;
                }
                set
                {
                    _CWQty = value;
                    OnPropertyChanged("CWQty");
                    OnPropertyChanged("Quantity");
                    OnPropertyChanged("ActualPriceAfterDiscount");
                    OnPropertyChanged("NetAmount");
                }
            }

            private double? _Quantity;

            public double? Quantity
            {
                get
                {
                    if (_IsCatchWeight == true)
                    {
                        if (MaxQuantity.HasValue && _MaxQuantity < (CWQty * CWSize))
                        {
                            CWQty = MaxCWQty;
                        }
                        return _Quantity = CWQty * CWSize;
                    }
                    if(MaxQuantity.HasValue && _Quantity > _MaxQuantity)
                    {
                        _Quantity = _MaxQuantity;
                    }
                    return _Quantity;
                }
                set
                {
                    _Quantity = value;
                    OnPropertyChanged("Quantity");
                    OnPropertyChanged("MaxQuantity");
                    OnPropertyChanged("ActualPriceAfterDiscount");
                    OnPropertyChanged("NetAmount");
                }
            }

            private string _Unit;

            public string Unit
            {
                get
                {
                    if (_ItemAccountId.HasValue)
                        return _Unit = _ItemAccountList?.FirstOrDefault(x => x.Id == ItemAccountId)?.UOM?.Name;
                    return _Unit;
                }
                set
                {
                    _Unit = value;
                    OnPropertyChanged("Unit");
                }
            }

            private float? _UnitPrice;

            public float? UnitPrice
            {
                get { return _UnitPrice; }
                set
                {
                    _UnitPrice = value;
                    OnPropertyChanged("UnitPrice");
                    OnPropertyChanged("ActualPriceAfterDiscount");
                    OnPropertyChanged("NetAmount");
                }
            }

            private float? _Discount;

            public float? Discount
            {
                get { return _Discount; }
                set
                {
                    _Discount = value;
                    OnPropertyChanged("Discount");
                    OnPropertyChanged("ActualPriceAfterDiscount");
                    OnPropertyChanged("NetAmount");
                }
            }

            private int? _DiscountPercent;

            public int? DiscountPercent
            {
                get
                {
                    if (_DiscountPercent == 0)
                        return _DiscountPercent = null;
                    return _DiscountPercent;
                }
                set
                {
                    _DiscountPercent = value;
                    OnPropertyChanged("DiscountPercent");
                    OnPropertyChanged("ActualPriceAfterDiscount");
                    OnPropertyChanged("NetAmount");
                }
            }


            private double? _ActualPriceAfterDiscount;

            public double? ActualPriceAfterDiscount
            {
                get
                {
                    return _ActualPriceAfterDiscount = (UnitPrice - (Discount ?? 0.0)) - ((DiscountPercent.HasValue == true) ? ((UnitPrice - (Discount ?? 0.0)) * (DiscountPercent / 100.0)) : 0.0);
                }
                set
                {
                    _ActualPriceAfterDiscount = value;
                    OnPropertyChanged("ActualPriceAfterDiscount");
                    //OnPropertyChanged("NetAmount");
                }
            }


            private double? _NetAmount;

            public double? NetAmount
            {
                get
                {
                    return _NetAmount = ActualPriceAfterDiscount * _Quantity;
                }
                set
                {
                    _NetAmount = value;
                    OnPropertyChanged("NetAmount");
                }
            }

            private int? _SiteId;

            public int? SiteId
            {
                get { return _SiteId; }
                set
                {
                    _SiteId = value;
                    OnPropertyChanged("SiteId");
                    OnPropertyChanged("WarehouseList");
                    OnPropertyChanged("WarehouseId");
                }
            }

            private int? _WarehouseId;

            public int? WarehouseId
            {
                get
                {
                    if (!_SiteId.HasValue)
                        return _WarehouseId = null;
                    return _WarehouseId;
                }
                set
                {
                    _WarehouseId = value;
                    OnPropertyChanged("WarehouseId");
                }
            }

            private double? _MaxQuantity;

            public double? MaxQuantity
            {
                get { return _MaxQuantity; }
                set
                {
                    _MaxQuantity = value;
                    OnPropertyChanged("MaxQuantity");
                }
            }

            private double? _MaxCWQty;

            public double? MaxCWQty
            {
                get { return _MaxCWQty; }
                set
                {
                    _MaxCWQty = value;
                    OnPropertyChanged("MaxCWQty");
                }
            }

            #region DropDownList

_ItemAccountList = new ObservableCollection<ItemAccount>();
            private static ObservableCollection<ItemAccount> _ItemAccountList = GetGeneralData.GetItemAccountListStatic();

            public static ObservableCollection<ItemAccount> ItemAccountList
            {
                get
                {
                    if (_ItemAccountList.Any() == false)
                        return _ItemAccountList = GetGeneralData.GetItemAccountListStatic();
                    return _ItemAccountList;
                }
                set
                {
                    _ItemAccountList = value;
                    //OnPropertyChanged("ItemAccountList");
                }
            }

            private ObservableCollection<MiscList> _SiteList = new ObservableCollection<MiscList>();

            public ObservableCollection<MiscList> SiteList
            {
                get
                {
                    if (_SiteList.Any() == false)
                        return _SiteList = getData.GetSiteList();
                    return _SiteList;
                }
                set
                {
                    _SiteList = value;
                    OnPropertyChanged("SiteList");
                }
            }

            private ObservableCollection<MiscList> _WarehouseList;

            public ObservableCollection<MiscList> WarehouseList
            {
                get
                {
                    return _WarehouseList = getData.GetWarehouseList(SiteId);
                }
                set
                {
                    _WarehouseList = value;
                    OnPropertyChanged("WarehouseList");
                }
            }

            #endregion

            #region PropertyChange
            public event PropertyChangedEventHandler PropertyChanged;

            protected void OnPropertyChanged(string propertyName)
            {
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }

            #endregion
        }

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Спасибо каждому приятелю за вклад.У меня работает по умолчанию инициализация свойства Data Grid

   private ObservableCollection<SaleInvoiceDetialDataGridViewModel> _DataGridCollection = new ObservableCollection<SaleInvoiceDetialDataGridViewModel>();

        public ObservableCollection<SaleInvoiceDetialDataGridViewModel> DataGridCollection
        {
            get
            {
                return _DataGridCollection;
            }
            set
            {
                _DataGridCollection = value;
                OnPropertyChanged("DataGridCollection");
            }
        }
0 голосов
/ 01 октября 2018

Вы ничего не видите в сетке, так как вы не инициализировали свою коллекцию.Так как вы пытаетесь связать свойство ItemsSource DataGrid, вам нужно передать данные в коллекцию, чтобы увидеть разницу.Тогда я предполагаю, что вы знаете, что при использовании ObservableCollection вы сможете довольно легко поддерживать обновления коллекции, подробнее об этом описано в этом билете: Что такое ObservableCollection в .net?

И вернемся к вашей проблеме, попробуйте следующий код:

    public SaleInvoiceDetialViewModel()
    {
        DataGridCollection = new ObservableCollection<SaleInvoiceDetialDataGridViewModel>
        {
            new SaleInvoiceDetialDataGridViewModel(),
            new SaleInvoiceDetialDataGridViewModel()
        };
    }

РЕДАКТИРОВАТЬ: Как это выглядит на моей стороне после инициализации: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...