识别自动生成的TextBox

时间:2015-05-11 07:26:34

标签: c# wpf datagrid textchanged

我想构建一个简单的属性视图,其中可以更改每个值。

属性按以下名称分组:

  • name1 property1,property2
  • name2 property1,property2
  • ...

所以我创建了一个带有模板的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

1 个答案:

答案 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
        }
    }