我想构建一个简单的属性视图,其中可以更改每个值。
属性按以下名称分组:
所以我创建了一个带有模板的DataGrid来填充网格(注意我删除了每个样式属性等,文本值也只是示例):
<DataGrid Name="propertyGrid">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Property Group Name">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding propertyGroupName}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Property 1">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding property1}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Property 2">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding property2}" TextChanged="TextBox_TextChanged" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
正如您所看到的,我现在正在尝试添加TextChanged
事件并且存在我的问题:我从哪里获取propertyGroupName
信息,因为我只需要更改{{1来自特定的property2
。
我已准备好任何提示或解决方案......也许'auto gen datagrid'不是最好的决定吗?
修改我的代码背后。在这里,您可以看到填充propertyGroup
的页面和我要绑定的类(请注意方法DataGrid
只是读取我的属性文件):
GetPropertyX
答案 0 :(得分:1)
您可以将PropertyGroup
绑定到TextBox
Tag
,然后您可以在事件处理程序中读取它并检查属性组名称:
<DataGrid Name="propertyGrid">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Property Group Name">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding propertyGroupName}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Property 1">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding property1}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Property 2">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding property2}" Tag="{Binding Path=.}" TextChanged="TextBox_TextChanged" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
唯一的区别是Tag="{Binding Path=.}"
。
事件处理程序:
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
var textbox = (sender as TextBox);
if ((textbox.Tag as PropertyGroup).PropertyGroupName == "the name you want")
{
//do stuff
}
}