Я работаю над программой, которая будет использовать существующий список и позволит пользователям выбирать элемент индивидуально или с помощью флажка «Выбрать все».
Когда флажок «Выбрать все» установлен в виде билета , визуальное обновление не меняется, однако, когда пользователи прокручивают вниз, соответствующие флажки заполняются, а пустые при прокрутке вверх также обновляются.
Функционально опция флажка работает хорошо, но визуально это не работает, и пользователи могут счесть это ошибкой.
Я проверил привязки, все правильно.
private void CheckBoxCheckAll_Checked(object sender, RoutedEventArgs e)
{
PrintLabelViewModel.ToggleCheckUncheck(true);
Debug.WriteLine("Checked all" + PrintLabelViewModel.PrintLabelCollection.Count);
//ForceDataGridRefresh();
}
private void CheckBoxCheckAll_Unchecked(object sender, RoutedEventArgs e)
{
PrintLabelViewModel.ToggleCheckUncheck(false);
//ForceDataGridRefresh();
}
#endregion
private void headerRowCheckBox_Unchecked(object sender, RoutedEventArgs e)
{
if (PrintLabelViewModel.PrintLabelCollection.All(p => !p.IsSelectedToPrint))
{
PrintLabelViewModel.IsCheckAll = false;
//ForceDataGridRefresh();
}
}
private void headerRowCheckBox_Checked(object sender, RoutedEventArgs e)
{
if (PrintLabelViewModel.PrintLabelCollection.All(p => p.IsSelectedToPrint))
{
PrintLabelViewModel.IsCheckAll = true;
//ForceDataGridRefresh();
}
}
//private void ForceDataGridRefresh()
//{
// // Assuming your DataGrid is named "dataGrid"
// var dataGrid = FindName("displayDataGrid") as DataGrid;
// if (dataGrid != null)
// {
// dataGrid.Items.Refresh();
// //var temp = dataGrid.ItemsSource;
// //dataGrid.ItemsSource = null;
// //dataGrid.ItemsSource = temp;
// }
//}
Обратите внимание, что код ForceDataRefresh, а также триггеры, которые я пытался исправить, приводили только к пустой сетке данных.
РЕДАКТИРОВАТЬ:
Модель PrintLabelViewModel довольно большая: вот области, сообщите, если нужно больше
public class PrintLabelViewModel : ViewModelBase
{
#region Variables
private Window _ownerWindow;
private DymoLabels dymoLabels;
private DymoAddIn dymoAddIn;
private string labelPath = string.Empty;
string tmpDeptHashId = string.Empty,
productId = string.Empty,
categoryId = string.Empty,
manufacturerId = string.Empty,
brandId = string.Empty;
string deptName = string.Empty,
categoryName = string.Empty,
manufacturerName = string.Empty,
brandName = string.Empty;
private string category1 = string.Empty,
category2 = string.Empty,
category3 = string.Empty,
category4 = string.Empty;
#endregion
#region Constructor
///
/// Initialize notification type list and all button command initialization with handle execute methods
///
///
public PrintLabelViewModel(Window ownerWin)
{
_ownerWindow = ownerWin;
PrinterList = new ObservableCollection();
FormatList = new ObservableCollection();
PriceTypeList = new ObservableCollection();
RefreshCommand = new DelegateCommand(RefreshExecute);
PrintCommand = new DelegateCommand(PrintExecute);
CloseCommand = new DelegateCommand(CloseExecute);
ManufacturerCollection = new ObservableCollection();
BrandCollection = new ObservableCollection();
VendorCollection = new ObservableCollection();
LoadLabelTemplates();
BindPrinters();
BindPriceTypes();
BindVendors();
DymoSDK.App.Init();
dymoSDKLabel = DymoLabel.Instance;
labelPath = FileSystemHelper.DymoLabelTemplateFolder;
}
#endregion
#region Properties
private ObservableCollection printerList;
public ObservableCollection PrinterList
{
get { return printerList; }
set
{
if (printerList != value)
{
printerList = value;
RaisePropertyChanged("PrinterList");
}
}
}
private ObservableCollection printLabelCollection;
public ObservableCollection PrintLabelCollection
{
get { return printLabelCollection; }
set
{
if (printLabelCollection != value)
{
printLabelCollection = value;
RaisePropertyChanged("PrintLabelCollection");
}
}
}
private PrintLabel selectedPrintLabel;
public PrintLabel SelectedPrintLabel
{
get { return selectedPrintLabel; }
set
{
if (selectedPrintLabel != value)
{
selectedPrintLabel = value;
RaisePropertyChanged("SelectedPrintLabel");
}
}
}
private CommonDict selectedPrinter;
public CommonDict SelectedPrinter
{
get { return selectedPrinter; }
set
{
if (selectedPrinter != value)
{
selectedPrinter = value;
RaisePropertyChanged("SelectedPrinter");
LoadLabelTemplates();
}
}
}
private CommonDict selectedPriceType;
public CommonDict SelectedPriceType
{
get { return selectedPriceType; }
set
{
if (selectedPriceType != value)
{
selectedPriceType = value;
RaisePropertyChanged("SelectedPriceType");
}
}
}
private ObservableCollection priceTypeList;
public ObservableCollection PriceTypeList
{
get { return priceTypeList; }
set
{
if (priceTypeList != value)
{
priceTypeList = value;
RaisePropertyChanged("PriceTypeList");
}
}
}
private ObservableCollection formatList;
public ObservableCollection FormatList
{
get { return formatList; }
set
{
if (formatList != value)
{
formatList = value;
RaisePropertyChanged("FormatList");
}
}
}
private CommonDict selectedFormat;
public CommonDict SelectedFormat
{
get { return selectedFormat; }
set
{
if (selectedFormat != value)
{
selectedFormat = value;
RaisePropertyChanged("SelectedFormat");
}
}
}
private ObservableCollection manufacturerCollection;
public ObservableCollection ManufacturerCollection
{
get { return manufacturerCollection; }
set
{
if (manufacturerCollection != value)
{
manufacturerCollection = value;
RaisePropertyChanged("ManufactureCollection");
}
}
}
private ObservableCollection brandCollection;
public ObservableCollection BrandCollection
{
get { return brandCollection; }
set
{
if (brandCollection != value)
{
brandCollection = value;
RaisePropertyChanged("BrandCollection");
}
}
}
private ObservableCollection vendorCollection;
public ObservableCollection VendorCollection
{
get { return vendorCollection; }
set
{
if (vendorCollection != value)
{
vendorCollection = value;
RaisePropertyChanged("VendorCollection)");
}
}
}
private CommonDict selectedVendor;
public CommonDict SelectedVendor
{
get { return selectedVendor; }
set
{
if (selectedVendor != value)
{
selectedVendor = value;
RaisePropertyChanged("SelectedVendor");
//UpdateVendorInfo(value.Key);
}
}
}
private bool includeBuydown;
public bool IncludeBuydown
{
get { return includeBuydown; }
set
{
if (includeBuydown != value)
{
includeBuydown = value;
RaisePropertyChanged("IncludeBuydown");
}
}
}
private bool includeDiscount;
public bool IncludeDiscount
{
get { return includeDiscount; }
set
{
if (includeDiscount != value)
{
includeDiscount = value;
RaisePropertyChanged("IncludeDiscount");
}
}
}
private bool isCheckAll;
public bool IsCheckAll
{
get { return isCheckAll; }
set
{
if (isCheckAll != value)
{
isCheckAll = value;
RaisePropertyChanged("IsCheckAll");
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... sharp-xaml