2015-05-11 144 views
0

我想構建一個簡單的屬性視圖,其中可以更改每個值。識別自動生成的文本框

的屬性由一個名字類似這樣的分組:

  • 名1property1,property2
  • 名2property1,property2
  • ...

S Ø我創建一個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信息,因爲我只需要更改property2從特定propertyGroup

我準備好了任何提示或解決方案......也許'自動生成datagrid'不是最好的決定嗎?

編輯我的代碼在後面。在這裏,您可以看到頁面填充DataGrid和我綁定的類(注意方法GetPropertyX只是讀我的屬性文件):

public PropertiesPage() 
    { 
     InitializeComponent(); 

     List<PropertyGroup> properties = new List<PropertyGroup>(); 
     properties.Add(GetPropertyGroup("propertyGroup1")); 
     properties.Add(GetPropertyGroup("propertyGroup2")); 
     properties.Add(GetPropertyGroup("propertyGroup3")); 

     propertyGrid.ItemsSource = properties; 

    } 

    private PropertyGroup GetPropertyGroup(string propertyGroupName) 
    { 
     return new CarrierConfig() 
     { 
      PropertyGroupName = propertyGroupName, 
      Property1 = GetProperty1(propertyGroupName), 
      Property2 = GetProperty2(propertyGroupName) 
     }; 
    } 

    public class PropertyGroup 
    { 
     public string PropertyGroupName { get; set; } 
     public string Property1 { get; set; } 
     public string Property2 { get; set; } 
    } 
+0

你在尋找一個屬性網格?如果是這樣的話[這裏](http://wpg.codeplex.com/) – Muds

+0

沒有可靠的方法來做到這一點與DataGrid。如果你發佈你正在綁定的課程,我可以進一步幫助你。也許TreeView與HierarchicalDataTemplate將是一個不錯的選擇 – Domysee

+0

@Muds謝謝,我會看看這個! – Sonnywhite

回答

1

您可以將PropertyGroup綁定到TextBoxTag,那麼你可以在事件處理程序讀取並檢查屬性組名稱:

​​

唯一的區別是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 
     } 
    } 
+0

它適用於我,但它看起來有點冒險...但由於我是C#和WPF的新手,我無法評估此解決方案:) ...我將使用它!謝謝 ;) – Sonnywhite