我希望 wpf DataGrid 其余部分中的数据是只读的,并且只有新行应该是可编辑的
Posted
技术标签:
【中文标题】我希望 wpf DataGrid 其余部分中的数据是只读的,并且只有新行应该是可编辑的【英文标题】:I want data in the rest of wpf DataGrid to be read only and only new row should be editable 【发布时间】:2013-04-21 12:09:36 【问题描述】:我已经设法让DataGrid
显示用于添加新项目的新行。
我现在面临的问题是我希望 wpf DataGrid
的其余部分中的数据是只读的,并且只有新行应该是可编辑的。
目前这是我的DataGrid
的外观。
<DataGrid AutoGenerateColumns="False" Name="DataGridTest" CanUserAddRows="True" Grid.Row="2" ItemsSource="Binding TestBinding" >
<DataGrid.Columns>
<DataGridTextColumn Header="Line" IsReadOnly="True" Binding="Binding Path=Test1" Width="50"></DataGridTextColumn>
<DataGridTextColumn Header="Account" IsReadOnly="True" Binding="Binding Path=Test2" Width="130"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
但由于我将列保持为只读,因此新行也会添加为只读,这是我不想要的。
【问题讨论】:
【参考方案1】:试试这个MSDN blog
另外,试试下面的例子:
Xaml:
<DataGrid AutoGenerateColumns="False" Name="DataGridTest" CanUserAddRows="True" ItemsSource="Binding TestBinding" Margin="0,50,0,0" >
<DataGrid.Columns>
<DataGridTextColumn Header="Line" IsReadOnly="True" Binding="Binding Path=Test1" Width="50"></DataGridTextColumn>
<DataGridTextColumn Header="Account" IsReadOnly="True" Binding="Binding Path=Test2" Width="130"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
<Button Content="Add new row" HorizontalAlignment="Left" Margin="0,10,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>
CS:
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
public MainWindow()
InitializeComponent();
private void Button_Click_1(object sender, RoutedEventArgs e)
var data = new Test Test1 = "Test1", Test2 = "Test2" ;
DataGridTest.Items.Add(data);
public class Test
public string Test1 get; set;
public string Test2 get; set;
【讨论】:
至少在这个简单的例子中,你可以稍微简化一下,根本不用声明 Test 类。改为匿名类型:DataGridTest.Items.Add(new Test1 = "Test1", Test2 = "Test2" );
我正在使用相同的方法,但在某些行之后它显示空引用错误
@Dave Clemmer .,我如何在 ViewModel 中做到这一点。
这个解决方案的一个大问题是DataGridColumn
的IsReadOnly
属性不可出价,这与DataGrid 本身的IsReadOnly 相反。【参考方案2】:
只需使用 Style
中的 DataGridRow
即可:
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="IsEnabled" Value="Binding RelativeSource=RelativeSource Self,Path=IsNewItem,Mode=OneWay" />
</Style>
</DataGrid.RowStyle>
【讨论】:
简洁明了,这应该是公认的答案。 @TalhaTalipAçıkgöz 这就是 OP 想要的以上是关于我希望 wpf DataGrid 其余部分中的数据是只读的,并且只有新行应该是可编辑的的主要内容,如果未能解决你的问题,请参考以下文章