من در یکی از ستون های داخل دیتاگریدم یک کمبوباکس اضافه کردم , و میخوام به خصوصیات اون در Code behind دسترسی داشته باشم (دسترسی به کنترل های تو در تو ) مثل صدا زدن یک کنترل بر اساس اسمش .
یکی از دلایلی که نیاز دارم به این کار اینه که ویژگی SelectedIndex روی این کمبوباکس داخل دیتاگرید هم تغییر نمیکنه
من چه راه هایی رو امتحان کردم؟
XAML :
<Grid x:Name="mygrid">
<DataGrid x:Name="MainDataGrid">
<DataGrid.Columns>
<DataGridTextColumn Header="The Name :" Width="120" Binding="{Binding NAMES, UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" />
<DataGridTemplateColumn Header="CMB" Width="150">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox x:Name="ComboBox1"
SelectedValuePath="CODE"
DisplayMemberPath="NAMES"
IsTextSearchEnabled="True"
SelectedIndex="0"
IsEditable="False"
SelectionChanged="ComboBox1_SelectionChanged"
BorderBrush="#FFADEEB4" Background="{x:Null}" BorderThickness="1">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.VirtualizationMode="Recycling"/>
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
CS:
//Finder
#region Kids
public static T GetChildOfType<T>(DependencyObject depObj) where T : DependencyObject
{
if (depObj == null) return null;
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
var child = VisualTreeHelper.GetChild(depObj, i);
var result = (child as T) ?? GetChildOfType<T>(child);
if (result != null) return result;
}
return null;
}
public static T FindChild<T>(DependencyObject parent, string childName) where T : DependencyObject
{
// Confirm parent and childName are valid.
if (parent == null) return null;
T foundChild = null;
int childrenCount = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < childrenCount; i++)
{
var child = VisualTreeHelper.GetChild(parent, i);
// If the child is not of the request child type child
T childType = child as T;
if (childType == null)
{
// recursively drill down the tree
foundChild = FindChild<T>(child, childName);
// If the child is found, break so we do not overwrite the found child.
if (foundChild != null) break;
}
else if (!string.IsNullOrEmpty(childName))
{
var frameworkElement = child as FrameworkElement;
// If the child's name is set for search
if (frameworkElement != null && frameworkElement.Name == childName)
{
// if the child's name is of the request name
foundChild = (T)child;
break;
}
}
else
{
// child element found.
foundChild = (T)child;
break;
}
}
return foundChild;
}
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;
}
#endregion
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var Test0 = this.FindName("ComboBox1");
var Test1 = mygrid.Children.OfType<ComboBox>().FirstOrDefault();
var Test2 = GetChildOfType<ComboBox>(mygrid);
var Test3 = FindChild<ComboBox>(Application.Current.MainWindow, "ComboBox1");
}
تمام اون Test ها از 0 تا 3 همشون Null هستن در تست نهایی !
لطفا راهنمایی بفرمایید
ممنون از توجه شما
دوستان این فانکشن جواب هست اما من متوجه شدم اصلا نیازی نیست از این کار استفاده کرد اگر شما از بایندینگ استفاده کنید:
public class UISOME
{
public static DependencyObject FindChild(DependencyObject parent, Func<DependencyObject, bool> predicate)
{
if (parent == null) return null;
int childrenCount = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < childrenCount; i++)
{
var child = VisualTreeHelper.GetChild(parent, i);
if (predicate(child))
{
return child;
}
else
{
var foundChild = FindChild(child, predicate);
if (foundChild != null)
return foundChild;
}
}
return null;
}
}
تاریخ :
1404/03/06
- ساعت :
03:00:00 PM
- بازدید :
145
- پاسخ :
2
|
تاریخ :
1398/10/01
- ساعت :
01:02:00 PM
- بازدید :
5942
- پاسخ :
1
|
تاریخ :
1399/11/10
- ساعت :
10:01:00 PM
- بازدید :
7609
- پاسخ :
5
|
تاریخ :
1404/01/28
- ساعت :
10:46:00 AM
- بازدید :
180
- پاسخ :
1
|
تاریخ :
1404/01/28
- ساعت :
10:27:00 AM
- بازدید :
159
- پاسخ :
1
|
تاریخ :
1399/11/25
- ساعت :
11:22:00 AM
- بازدید :
4178
- پاسخ :
2
|
تاریخ :
1403/12/02
- ساعت :
12:09:00 AM
- بازدید :
484
- پاسخ :
1
|
تاریخ :
1398/07/08
- ساعت :
12:21:00 AM
- بازدید :
3163
- پاسخ :
2
|
تاریخ :
1403/11/23
- ساعت :
08:24:00 PM
- بازدید :
458
- پاسخ :
2
|
تاریخ :
1399/04/09
- ساعت :
08:51:00 PM
- بازدید :
3260
- پاسخ :
1
|
تاریخ :
1399/12/17
- ساعت :
02:47:00 PM
- بازدید :
8009
- پاسخ :
4
|
تاریخ :
1401/01/28
- ساعت :
04:04:00 PM
- بازدید :
2656
- پاسخ :
1
|
تاریخ :
1404/04/04
- ساعت :
02:25:00 PM
- بازدید :
33
- پاسخ :
1
|
تاریخ :
1404/04/04
- ساعت :
03:35:00 PM
- بازدید :
42
- پاسخ :
1
|
تاریخ :
1404/03/22
- ساعت :
06:32:00 PM
- بازدید :
80
- پاسخ :
0
|
تاریخ :
1403/10/08
- ساعت :
06:22:00 PM
- بازدید :
327
- پاسخ :
1
|
تاریخ :
1399/07/29
- ساعت :
05:26:00 PM
- بازدید :
8973
- پاسخ :
1
|
تاریخ :
1404/03/22
- ساعت :
11:17:00 PM
- بازدید :
124
- پاسخ :
2
|
تاریخ :
1404/03/20
- ساعت :
01:31:00 PM
- بازدید :
66
- پاسخ :
1
|
تاریخ :
1404/03/22
- ساعت :
11:10:00 AM
- بازدید :
93
- پاسخ :
1
|