Как сделать указание c ячейка столбца DataGridTemplate только для чтения - PullRequest
0 голосов
/ 19 апреля 2020

Я использую привязку данных для заполнения таблицы в приложении wpf. Я также добавляю кнопку для выполнения дальнейших действий с помощью следующего кода:

<DataGrid x:Name="DispJob" ItemsSource ="{Binding}" AutoGenerateColumns="False" Height="425" Margin="-10,26,0,20" IsReadOnly="True" Width="1000" HorizontalAlignment="Left" CanUserResizeColumns="True" CanUserSortColumns="True" >
            <DataGrid.Columns>
                <DataGridTextColumn Header="Job Name" Binding="{Binding Path=JobName}"/>
                <DataGridTextColumn Header="Job Type" Binding="{Binding Path=JobType}"/>
                <DataGridTextColumn Header="URL" Binding="{Binding Path=URL}"/>
                <DataGridTextColumn Header="Username" Binding="{Binding Path=Username}"/>
                <DataGridTextColumn Header="Current Status" Binding="{Binding Path=CurrentStatus}"/>
                <DataGridTextColumn Header="Last Execution Status and time" Binding="{Binding Path=LastStatus}"/>
                <DataGridTextColumn Header="Next Execution time" Binding="{Binding Path=NextStatus}"/>
                <DataGridTextColumn Header="Update" Binding="{Binding Path=Update}"/>
                <DataGridTemplateColumn Header="Update">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate x:Name="Button_Update_Temp">

                            <Button x:Name="btnUpdate" Content="Update" Click="btnUpdate_Click"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>

Теперь у меня есть специальное требование c, чтобы сделать свойство кнопки IsEnabled = false путем проверки условия, если имя пользователя, вошедшего в систему, является различное отображение в столбце. Пожалуйста, помогите и направьте.

Ответы [ 2 ]

0 голосов
/ 19 апреля 2020

Вы можете определить CellStyle в DataGridTemplateColumn и с помощью триггера вы можете установить свойство IsEnabled этой ячейки (я не знаю, как выглядит ваша модель. В моем примере для упрощения я предполагаю, что информация о зарегистрированном Пользователь находится в свойстве CurrentStatus, а для зарегистрированного пользователя установлено значение «LoggedIn». Вы можете изменить это условие триггера в соответствии с вашими c требованиями.):

<DataGrid x:Name="DispJob" ItemsSource ="{Binding}" AutoGenerateColumns="False" Height="425" Margin="-10,26,0,20" IsReadOnly="True" Width="1000" HorizontalAlignment="Left" CanUserResizeColumns="True" CanUserSortColumns="True" >
    <DataGrid.Columns>
        <DataGridTextColumn Header="Job Name" Binding="{Binding Path=JobName}"/>
        <DataGridTextColumn Header="Job Type" Binding="{Binding Path=JobType}"/>
        <DataGridTextColumn Header="URL" Binding="{Binding Path=URL}"/>
        <DataGridTextColumn Header="Username" Binding="{Binding Path=Username}"/>
        <DataGridTextColumn Header="Current Status" Binding="{Binding Path=CurrentStatus}"/>
        <DataGridTextColumn Header="Last Execution Status and time" Binding="{Binding Path=LastStatus}"/>
        <DataGridTextColumn Header="Next Execution time" Binding="{Binding Path=NextStatus}"/>
        <DataGridTextColumn Header="Update" Binding="{Binding Path=Update}"/>
        <DataGridTemplateColumn Header="Update">
            <DataGridTemplateColumn.CellStyle>
                <Style TargetType="DataGridCell">
                    <Setter Property="IsEnabled" Value="False"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding CurrentStatus}" Value="LoggedIn">
                            <Setter Property="IsEnabled" Value="True"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </DataGridTemplateColumn.CellStyle>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate x:Name="Button_Update_Temp">
                    <Button x:Name="btnUpdate" Content="Update" Click="btnUpdate_Click" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>
0 голосов
/ 19 апреля 2020

Есть много способов сделать sh это. Один из способов - реализовать пользовательский конвертер.

[ValueConversion(typeof(string), typeof(bool))]
public class UsernameToEnabledConverter : IValueConverter {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
        var username = value.ToString();
        // The GetCurrentUserName() method is your way to get the current logged user name. 
        if (username == GetCurrentUserName()) {
            return true;
        }

        return false;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
        throw new NotSupportedException();
    }
}

Затем вы связываете свойство Button.IsEnabled со свойством Username и используете конвертер (я поместил только важный код):

<Window
    ...
    <Window.Resources>
        <local:UsernameToEnabledConverter x:Key="UsernameToEnabledConverter" />
    </Window.Resources>

    <Grid>
        <DataGrid
            ...
            ItemsSource="{Binding}">
            <DataGrid.Columns>
                ...
                <DataGridTextColumn Binding="{Binding Path=Username}" Header="Username" />
                ...
                <DataGridTemplateColumn Header="Update">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate x:Name="Button_Update_Temp" DataType="local:CustomVm">
                            <Button
                                x:Name="btnUpdate"
                                Click="btnUpdate_Click" Content="Update"
                                IsEnabled="{Binding Username, Converter={StaticResource UsernameToEnabledConverter}}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...