كيف يمكنني العثور على عنصر "مربع الاختيار" الخاص بي الموجود في itemTemplate؟
-
03-07-2019 - |
سؤال
لدي العناصر التالية (بسيطة للغاية)
<ItemsControl Name="BlahList" ItemsSource="{Binding Blah}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Name="MyCheckBox" Content="{Binding Text}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
في الكود ، أود أن أفعل ما يلي:
foreach (var dahCurrentItem in BlahList.Items)
{
var ItemCheckBox = BlahList.GimmeMyControl(dahCurrentItem, "MyCheckBox")
// I'm going to do something with the check box here...
}
كيف يمكنني فعل ذلك؟
المحلول
أولاً ، لا إذا كانت هناك أي طريقة يمكنك تجنبها. من النظيف أن يربط خصائص مختلفة من CheckBox
إلى نموذج العرض الخاص بك بدلاً من محاولة سحبها يدويًا.
ومع ذلك ، إذا كنت بحاجة للوصول إلى CheckBox
, ، يجب أن تكون قادرًا على استخدام رمز مثل هذا:
var container = _itemsControl.ItemContainerGenerator.ContainerFromItem(dahCurrentItem) as FrameworkElement;
var checkBox = container.FindName("MyCheckBox") as CheckBox;
نصائح أخرى
حسنًا ، كينت يحصل على الائتمان ، لكنه كان فقط خاصة حقا :)
// This part was good:
var container = _itemsControl.ItemContainerGenerator.ContainerFromItem(dahCurrentItem) as FrameworkElement;
لكن ... الجزء الثاني سيعود فارغًا ، لذلك كان يجب أن يكون كما يلي:
var checkBox = _itemsControl.ItemTemplate.FindName("MyCheckBox", container) as CheckBox;
بدا رمزه أنه كان ينبغي أن ينجح ، لكن بالنسبة لحالتي ، كان علي أن أفعل ذلك بدلاً من ذلك.
إليك مثال على التقاط حاوية تضم عنصر العناصر الخاصة بك:
CheckBox checkbox = sender as CheckBox;
foreach (var item in MembersItemsControl.Items)
{
var container =
MembersItemsControl.ItemContainerGenerator.ContainerFromItem(item) as FrameworkElement;
UserInformation user = container.DataContext as UserInformation;
bool isMale = true;
if (user.sex == isMale && checkbox.IsChecked.Value == true)
{
container.Visibility = System.Windows.Visibility.Visible;
}
}
أتمنى أن يساعد ذلك.
لقد استخدمت الرمز الذي قدمته Kent و Timothy ، لكن هذا الخط الإضافي كان ضروريًا أيضًا بالنسبة لي.
يذهب مقتطف الكود بأكمله:
var container = _itemsControl.ItemContainerGenerator.ContainerFromItem(dahCurrentItem) as FrameworkElement;
container.ApplyTemplate()
var checkBox = _itemsControl.ItemTemplate.FindName("MyCheckBox", container) as CheckBox;
هتافات!