मैं अवधारणा के निम्न सबूत है:क्या यह एक डब्ल्यूपीएफ डेटाग्रिड बग है?
XAML खिड़की:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" />
<DataGridTemplateColumn >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Mode=TwoWay, Path=Enabled}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Window>
पीछे कोड:
using System.Collections.ObjectModel;
using System.Windows;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public ObservableCollection<Data> Items { get; private set; }
public MainWindow()
{
InitializeComponent();
this.Items = new ObservableCollection<Data>();
this.DataContext = this;
for (int index = 0; index < 30; index++)
{
this.Items.Add(new Data() {Enabled = true });
}
}
}
public class Data
{
public bool Enabled { get; set; }
}
}
, एप्लिकेशन निष्पादित शीर्ष पर कुछ बॉक्स को अनचेक करें, नीचे स्क्रॉल करें, कुछ बदल फिर से बॉक्स और स्क्रॉल करें। Voilá, चेकबॉक्स फिर से चेक कर रहे हैं!
क्या मुझे कुछ याद आ रहा है या क्या मुझे माइक्रोसॉफ्ट में एक बग भरना चाहिए?
संपादित करें: आपके प्रतिक्रियाओं के लिए धन्यवाद लेकिन यह टेक्स्टबॉक्स के साथ इनोटिफ़ी या चेकबॉक्स से संबंधित नहीं है और इन्हें समानता होती है। स्क्रॉल करने के बाद आपको चेकबॉक्स पर क्लिक करने की आवश्यकता नहीं है, बस कुछ अनचेक करें, स्क्रॉल करें, स्क्रॉल करें और वॉयला, फिर से जांच की जाती है।
<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTemplateColumn >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding Mode=TwoWay, Path=Enabled}" />
<TextBox Text="{Binding Text}" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Window>
और पीछे कोड: क्योंकि यह काम कर रहा है या नहीं जहाँ भी VirtualRows हैं की उम्मीद तरीका नहीं है
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public ObservableCollection<Data> Items { get; private set; }
public MainWindow()
{
InitializeComponent();
this.Items = new ObservableCollection<Data>();
this.DataContext = this;
for (int index = 0; index < 30; index++)
{
this.Items.Add(new Data() { Enabled = true, Text = index.ToString() });
}
}
}
public class Data : INotifyPropertyChanged
{
private bool _enabled;
public bool Enabled
{
get { return _enabled; }
set
{
if (value != _enabled)
{
_enabled = value;
this.OnPropertyChanged("Enabled");
}
}
}
private string _text;
public string Text
{
get { return _text; }
set
{
if (value != _text)
{
_text = value;
this.OnPropertyChanged("Text");
}
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string name)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
#endregion
}
}
क्या आपका परिणाम बदलता है यदि आप 'INOTifyPropertyChanged' से 'डेटा' उत्तराधिकारी बनाते हैं और संपत्ति परिवर्तन अधिसूचनाओं का उपयोग करते हैं? – Rachel
रीसाइक्लिंग बंद करने का प्रयास करें। क्या सेट बुलाया जाता है? यदि UpdateSourceTrigger = "PropertyChanged" नहीं है। और राहेल की तरह इरोटिफा ने कहा। – Paparazzi
मैं राहेल ने सुझाव दिया कि मैं कोशिश करूंगा। – ecMode