繁体   English   中英

从属性到UI的WPF复选框双向绑定在propertychanged事件上不起作用

[英]WPF checkbox twoway binding from property to UI is not working on propertychanged event

我在Telerik Grid视图控件的复选框数据列中使用双向绑定。 当我更改UI上复选框的状态时,它可以很好地触发属性更改事件。 但是我也要反过来,在更改后面代码的属性值时,复选框状态也应该在UI上更新。

<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;

}

在单击“刷新”按钮时,我希望所有复选框都未选中,但是当我在PopulateGridView中将ChangeValue设置为false时,它们不会更新。 请提出我该如何实现。

您需要指定何时更新用户界面,在这种情况下应更改属性

       <CheckBox  IsChecked="{Binding ChangeValue, Mode=TwoWay, UpdateSourceTrigger="PropertyChanged"}" Margin="3"/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM