WPF复选框IsChecked双向绑定无法正常工作

时间:2018-02-19 06:51:01

标签: c# wpf mvvm data-binding

我为双向绑定编写了以下代码。当代码发生变化但反之亦然时,UI会更新,当用户点击复选框时,UI不会更改数据代码。感谢是否有人对解决方案有所了解。

XAML代码

  <DataGrid ItemsSource="{Binding StatusItems}"  Name="DataGridUploadingRevitFiles" Margin="5"
                          IsReadOnly="False" SelectionMode="Single" CanUserAddRows="True" 
                          AutoGenerateColumns="False" SelectionUnit="Cell" Height="Auto">

                <DataGrid.Columns>                   
                    <DataGridTemplateColumn Header="Update" Width=".5*">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>

                                <CheckBox Width="200"
                                 IsChecked="{Binding Path=IsUpdateAbleFile, 
                                 Mode=TwoWay, 
                                 UpdateSourceTrigger=PropertyChanged}"/>

                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>

                </DataGrid.Columns>


  </DataGrid>

型号[FamilyStatusItem.cs]

public class FamilyStatusItem : INotifyPropertyChanged
{   

    private bool _isUpdateAbleFile;
    public bool IsUpdateAbleFile
    {
        get => this._isUpdateAbleFile;
        private set
        {
            this._isUpdateAbleFile = value;
            OnPropertyChanged();
        }
    }


    public event PropertyChangedEventHandler PropertyChanged;
    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

ViewModel [FamilyStatusViewItem.cs]

public class FamilyStatusViewItem
{
    public ObservableCollection<FamilyStatusItem> StatusItems { get; set; }
    public FamilyStatusViewItem()
    {
        this.StatusItems = new ObservableCollection<FamilyStatusItem>();
    }
}

3 个答案:

答案 0 :(得分:4)

你的setter是私有的,这意味着它无法从外部调用。因此,当您勾选或取消选中该复选框时,无法调用该属性,并且该属性将保留旧状态。

解决方案:删除私人修饰符。

答案 1 :(得分:2)

尝试使用public setter

public bool IsUpdateAbleFile
{
    get => this._isUpdateAbleFile;
    set
    {
        this._isUpdateAbleFile = value;
        OnPropertyChanged();
    }
}

答案 2 :(得分:2)

你有私人二传手

private set
{
    this._isUpdateAbleFile = value;
    OnPropertyChanged();
}

将此更改为公开,然后它应该有效。