Я использую двустороннюю привязку в столбце данных флажка в элементе управления представлением Telerik Grid. когда я меняю состояние флажка в пользовательском интерфейсе, он работает нормально, вызывая событие изменения свойства. Но я также хочу наоборот: при изменении значения свойства в коде позади состояние флажка также должно обновляться в пользовательском интерфейсе.
<Button x:Name="btn1" Grid.Row="0" Content="Refresh" Click="btn1_Click" Width="100" Margin="0,5"/>
<telerik:RadGridView Grid.Row="1" x:Name="gridView" ShowGroupPanel="False" IsFilteringAllowed="False" SelectionMode="Multiple">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn Width="70" Header="Color">
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding ChangeValue, Mode=TwoWay}" Margin="3"/>
</StackPanel>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn Header="Data" DataMemberBinding="{Binding dataVal}" IsReadOnly="True"/>
</telerik:RadGridView.Columns>
</telerik:RadGridView>
</Grid>
Код ниже
public partial class MainWindow : Window
{
List<Data> dataSource = new List<Data>();
public MainWindow()
{
InitializeComponent();
for (int i = 0; i < 10; i++)
{
data d = new Data();
d.DataVal= "Data " + (i + 1);
dataSource.Add(d);
}
this.gridView.SelectedItems.Clear();
PopulateGridView();
}
private void PopulateGridView()
{
foreach (Data d in dataSource)
{
d.DataVal= false;
}
this.gridView.ItemsSource = dataSource;
List<Data> selectedItems = new List<Data>();
selectedItems.Add(dataSource[0]);
this.gridView.Select(selectedItems);
}
private void btn1_Click(object sender, RoutedEventArgs e)
{
PopulateGridView();
}
}
public class Data: INotifyPropertyChanged
{
public Data()
{
DataVal = string.Empty;
}
public string DataVal { get; set; }
public bool ChangeValue
{
get { return changevalue; }
set
{
if (value != changevalue)
{
changevalue= value;
if (ApplyPropertyChanged!= null)
{
ApplyPropertyChanged(this, new PropertyChangedEventArgs("ChangeValue"));
}
}
}
}
private bool changevalue;
public event PropertyChangedEventHandler ApplyPropertyChanged;
}
При нажатии кнопки «Обновить» я хочу, чтобы все флажки были сняты, но они не обновляются, когда я устанавливаю для ChangeValue значение false в PopulateGridView. Пожалуйста, подскажите, как я могу этого добиться.
DataVal
наfalse
? - person Default   schedule 17.03.2015PropertyChanged
, а неApplyPropertyChanged
. Это вообще компилируется? - person Default   schedule 17.03.2015