好的,所以我不知道这是否可能,但是?我正在尝试填充 DataGrid(确切地说是 Telerik RadGridView)并希望动态确定编辑控件。我正在尝试创建一个网格来显示正在导入应用程序的数据并显示三列(属性名称、入站数据和当前数据库数据)。基于我的对象类中的属性,“属性名称”列需要在其前面放置一个 CheckBox。这与其他列一起有条件地附加一个按钮,以便可以进行查找(一个 TextBox 或 TextBlock 将位于按钮前面以显示当前值)。我希望这能解释我正在尝试做的事情。下面是我想出的 XAML。
哦,这将进入 WPF MVVM C# 应用程序。
感谢您的任何帮助,您可以提供。
<UserControl x:Class="PulseHL7Importer.Views.DetailView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
xmlns:p="clr-namespace:PulseHL7Importer.Properties"
xmlns:fw="clr-namespace:PulseHL7Importer.Framework"
xmlns:vm="clr-namespace:PulseHL7Importer.ViewModels"
mc:Ignorable="d"
d:DesignHeight="200" d:DesignWidth="961">
<UserControl.Resources>
<telerik:BooleanToVisibilityConverter x:Key="BooleanVisibilityConverter" />
<DataTemplate x:Key="AddCheckBox">
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding HasCheckBox}" Value="True" />
</DataTemplate.Triggers>
<CheckBox IsChecked="{Binding IsChecked}" Margin="2,0,5,0" VerticalAlignment="Center" HorizontalAlignment="Center" />
</DataTemplate>
<DataTemplate x:Key="AddTextBlock">
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsReadOnly}" Value="True" />
</DataTemplate.Triggers>
<TextBlock Text="{Binding Value}" />
</DataTemplate>
<DataTemplate x:Key="AddTextBox">
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsReadOnly}" Value="False" />
</DataTemplate.Triggers>
<TextBox Text="{Binding Value}" />
</DataTemplate>
<DataTemplate x:Key="AddButton">
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding HasLookup}" Value="True" />
</DataTemplate.Triggers>
<Button Content="..." Width="{Binding RelativeSource={RelativeSource Self}, Path=ActualHeight}"
VerticalAlignment="Center" HorizontalAlignment="Center"/>
</DataTemplate>
<DataTemplate x:Key="ConditionalTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<ContentPresenter Grid.Column="0" Content="{Binding}" ContentTemplate="{StaticResource AddCheckBox}" />
<ContentPresenter Grid.Column="1" Content="{Binding}" ContentTemplate="{StaticResource AddTextBlock}" />
<ContentPresenter Grid.Column="1" Content="{Binding}" ContentTemplate="{StaticResource AddTextBox}" />
<ContentPresenter Grid.Column="2" Content="{Binding}" ContentTemplate="{StaticResource AddButton}" />
</Grid>
</DataTemplate>
</UserControl.Resources>
<Grid d:DataContext="{d:DesignInstance vm:DetailViewModel}">
<telerik:RadDockPanel Width="Auto">
<!-- Toolbar -->
<telerik:RadDockPanel telerik:RadDockPanel.Dock="Top">
<telerik:RadToolBar OverflowButtonVisibility="Collapsed" />
</telerik:RadDockPanel>
<!-- Warnings and Errors -->
<telerik:RadDockPanel telerik:RadDockPanel.Dock="Bottom">
<telerik:GroupBox Header="Warnings and Errors"
telerik:Theming.Theme="{Binding Source={x:Static p:Settings.Default}, Path=SelectedTheme}">
<TextBox Height="60" IsReadOnly="True"
VerticalScrollBarVisibility="Auto"
Background="FloralWhite" />
</telerik:GroupBox>
</telerik:RadDockPanel>
<!-- Grid Area -->
<telerik:RadDockPanel Width="Auto">
<telerik:RadGridView Name="DetailGridView" Width="Auto" AutoGenerateColumns="False" RowIndicatorVisibility="Collapsed"
CanUserDeleteRows="False" CanUserInsertRows="False" CanUserReorderColumns="False"
CanUserSortColumns="False" IsFilteringAllowed="False" ColumnWidth="*"
ShowGroupPanel="False" ItemsSource="{Binding Path=Properties}" >
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn Header="Name" DataMemberBinding="{Binding Path=Value}">
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<ContentPresenter ContentTemplate="{StaticResource ConditionalTemplate}" Content="{Binding Path=Properties}" />
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
<telerik:GridViewDataColumn.CellEditTemplate>
<DataTemplate>
<ContentPresenter ContentTemplate="{StaticResource ConditionalTemplate}" Content="{Binding Path=Properties}" />
</DataTemplate>
</telerik:GridViewDataColumn.CellEditTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn Header="Client Data" DataMemberBinding="{Binding Path=ClientData.Value}">
<telerik:GridViewDataColumn.CellEditTemplate>
<DataTemplate>
<ContentPresenter ContentTemplate="{StaticResource ConditionalTemplate}" Content="{Binding Path=ClientData}" />
</DataTemplate>
</telerik:GridViewDataColumn.CellEditTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn Header="Pulse Data" DataMemberBinding="{Binding Path=PulseData.Value}">
<telerik:GridViewDataColumn.CellEditTemplate>
<DataTemplate>
<ContentPresenter ContentTemplate="{StaticResource ConditionalTemplate}" Content="{Binding Path=PulseData}" />
</DataTemplate>
</telerik:GridViewDataColumn.CellEditTemplate>
</telerik:GridViewDataColumn>
</telerik:RadGridView.Columns>
</telerik:RadGridView>
</telerik:RadDockPanel>
</telerik:RadDockPanel>
</Grid>