0

以下のコードのようにDataGrid、XMLに追加されたものがあります。では、プログラムでComboBox名前付きにアクセスするにはどうすればよいですか?Combo1名前を使用して通常はアクセスできませんCombo1。その値を取得したり、itemssourceなどを変更したりできるようにしたい。

<DataGrid x:Name="dgData" AutoGenerateColumns="False" Margin="133,94,23,116" Grid.Column="1" SelectionChanged="dgData_SelectionChanged">
       <DataGrid.Columns>
           <DataGridTextColumn Binding="{Binding Subject}" Header="Subject" Width="*"/>
           <DataGridTemplateColumn Header="Status" Width="100">
               <DataGridTemplateColumn.CellTemplate>
                   <DataTemplate>
                       <ComboBox Name="Combo1" Height="22" ItemsSource="{StaticResource StatusList}" SelectedItem="{Binding Status}"/>
                   </DataTemplate>
               </DataGridTemplateColumn.CellTemplate>
           </DataGridTemplateColumn>
       </DataGrid.Columns>
</DataGrid>
4

2 に答える 2

0

ここで必要なものを見つけることができるはずです。ただし、これを行うのは最善の方法ではないと言います...

http://blogs.msdn.com/b/wpfsdk/archive/2007/04/16/how-do-i-programmatically-interact-with-template-generated-elements-part-ii.aspx

private childItem FindVisualChild<childItem>(DependencyObject obj)
    where childItem : DependencyObject
{
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
    {
        DependencyObject child = VisualTreeHelper.GetChild(obj, i);
        if (child != null && child is childItem)
            return (childItem)child;
        else
        {
            childItem childOfChild = FindVisualChild<childItem>(child);
            if (childOfChild != null)
                return childOfChild;
        }
    }
    return null;
}
于 2012-11-01T20:07:15.160 に答える
0

あなたはこのようなものを使用しようとすることができます:

    public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T :       DependencyObject
{
    if (depObj != null)
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
        {
            DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
            if (child != null && child is T)
            {
                yield return (T)child;
            }

            foreach (T childOfChild in FindVisualChildren<T>(child))
            {
                yield return childOfChild;
            }
        }
    }
}

しかし、MVVMパターンについてもっと読むことをお勧めします。

于 2012-11-01T20:10:18.260 に答える