简体   繁体   中英

WPF GridView SetReadOnly or Enabled on a column based on a checkbox

I have a RadGridView (telerik's version of a GridView ) and in this RadGridView I have the following column:

<telerik:GridViewCheckBoxColumn DataMemberBinding="{Binding Revoked}" AutoSelectOnEdit="True" Header="Revoked" UniqueName="Revoked" Width="Auto" IsReadOnly="False" FooterTextAlignment="Right" CellStyle="{StaticResource GridCellStyle}" />

I want to either enable/disable or set the read only flag on another two columns in the grid based on the checkbox column.

<telerik:GridViewDataColumn 
    DataMemberBinding="{Binding RevokedBy}" 
    Header="Revoked By" 
    UniqueName="RevokedBy" 
    Width="Auto" 
    IsReadOnly="{Binding Revoked}" 
    FooterTextAlignment="Right" 
    CellStyle="{StaticResource GridCellStyle}" />
<telerik:GridViewDataColumn 
    DataMemberBinding="{Binding RevokedDateTime}" 
    DataFormatString="dd/MM/yyyy HH:mm:ss" 
    Header="Revoked Date Time" 
    UniqueName="RevokedDateTime" 
    Width="Auto" 
    IsReadOnly="{Binding Revoked}" 
    FooterTextAlignment="Right" 
    CellStyle="{StaticResource GridCellStyle}">
   <telerik:GridViewDataColumn.CellEditTemplate>
       <DataTemplate>
           <WrapPanel Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="4">
               <telerik:RadDateTimePicker 
                   Margin="0 5 5 5" 
                   Width="250"
                   DisplayFormat="Short"                                     
                   InputMode="DatePicker" 
                   DateSelectionMode="Day"
                   DateTimeWatermarkContent="Select Date"
                   MaxWidth="155"
                   MinWidth="155"
                   SelectedDate="{Binding RevokedDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

               <telerik:RadMaskedDateTimeInput 
                   Margin="5"
                   Culture="en-GB"
                   EmptyContent="Enter Time"
                   InputBehavior="Replace"
                   Mask="HH:mm:ss"
                   SelectionOnFocus="SelectAll"
                   TextMode="MaskedText"
                   Value="{Binding RevokedTime, Mode=TwoWay}"/>
           </WrapPanel>
       </DataTemplate>
   </telerik:GridViewDataColumn.CellEditTemplate>
</telerik:GridViewDataColumn>

So far I have tried binding the IsReadOnly and IsEnabled property to Revoked but this doesn't seem to work, and I can see that the Revoked property is being set and the RaisePropertyChanged event is recurring.

Any help would be much appreciated.

UPDATED:

ViewModel:

/// <summary>
/// The agreements.
/// </summary>
private ObservableCollection<NotificationAgreement> agreements;

/// <summary>
/// Gets or sets the agreements.
/// </summary>
public ObservableCollection<NotificationAgreement> Agreements
{
    get
    {
        return this.agreements ?? (this.agreements = new ObservableCollection<NotificationAgreement>());
    }

    set
    {
        this.agreements = value;
        this.RaisePropertyChanged(() => this.Agreements);
    }
}

And the NotificationAgreement class has the following property.

/// <summary>
/// Gets or sets a value indicating whether revoked.
/// </summary>
public bool Revoked
{
    get
    {
        return this.revoked;
    }

    set
    {
        this.revoked = value;
        this.RaisePropertyChanged(() => this.Revoked);
    }
}

Can you paste your ViewModel, I just want to know that your are raising Notification to view when Revoked is Changed.

(1) Your viewmodel should have one ObservableCollection<yourObject>

(2) yourObject should implement INotifyPropertyChanged

(3) your Object should have property in following way

private bool _revoked;

public bool Revoked 
{
   get{return _revoked;}
   set { _revoked=value;
         RaisPropertyChanged("Revoked");
}

This is just mock code, please do it in your way.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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