簡體   English   中英

如何使用mvvm在wpf中的datagrid中更改isReadOnly單元格

[英]How to IsReadOnly change in cell in datagrid in wpf using mvvm

我的網格如下。

我想要的是當點擊datagrid中的復選框時,如果選中了True Holoday Name應該是啟用,否則它應該是可編輯的。

 <DataGrid CanUserDeleteRows="False" CanUserAddRows="False" Name="dgwCalenderDetails" SelectionMode="Single" ItemsSource="{Binding CalenderDetails, Mode=TwoWay}" IsReadOnly="False" AutoGenerateColumns="False" Width="770"> <DataGrid.Columns> <DataGridTextColumn Header="Day Id" Binding="{Binding DayId}" Visibility="Hidden" IsReadOnly="False" /> <DataGridTextColumn Header="Day" Binding="{Binding DayName}" Width="100" IsReadOnly="False"/> <DataGridTextColumn Header="Date" Binding="{Binding DisplayDate, StringFormat={}{0:dd/MM/yyyy}}" Width="75" IsReadOnly="False"/> <DataGridTextColumn Header="Start Time" Binding="{Binding StartTime, StringFormat=N2}" Width="100" IsReadOnly="False"/> <DataGridTextColumn Header="Working Hours" Binding="{Binding NoOfWorkingHrs, StringFormat=N2}" Width="100" IsReadOnly="False"/> <DataGridCheckBoxColumn Header="Holiday Status" Binding="{Binding IsHolidayYN}" Width="100" CanUserReorder="False"/> <DataGridTextColumn Header="Holoday Name" Binding="{Binding HolidayName}" Width="*" IsReadOnly="False" /> </DataGrid.Columns> <Style TargetType="{x:Type DataGridRow}"> <Setter Property="Background" Value="White"/> <Setter Property="IsEnabled" Value="True"/> <Style.Triggers> <DataTrigger Binding="{Binding IsHolidayYN}" Value="true"> <Setter Property="Background" Value="Gray"/> <Setter Property="IsEnabled" Value="False" /> </DataTrigger> </Style.Triggers> </Style> </DataGrid.Resources> </DataGrid> 

<DataGridTextColumn Binding="{Binding HolidayName}" >
    <DataGridTextColumn.CellStyle>
        <Style TargetType="DataGridCell">
            <Setter Property="IsEnabled" Value="{Binding IsHolidayYN}" />
        </Style>
    </DataGridTextColumn.CellStyle>
</DataGridTextColumn>

將屬性綁定到列的IsReadOnly屬性。 處理復選框選中事件並更新綁定到事件列的屬性

在viewModel中生成cellEditEnding事件並在里面檢查checkboxColumn的狀態。 如果選中,則查找列並設置為true; 就像是:

public void CellEditEndingEvent(object Sender, DataGridCellEditEndingEventArgs e)
{  
    if(String.Equals(e.Column.Header.ToString(), "YourCheckBoxFieldName")
    {
        var x = e.Row.Item as YourType;
        if(null != x)
        {
            e.EditingElement.IsEnabled = x.IsHolidayYN;
        }
    }            
}

要在viewModel中獲取此方法,請使用交互性和交互庫。 而且我沒有測試代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM