ItemTemplate에있는 "확인란"항목을 찾으려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/603203

  •  03-07-2019
  •  | 
  •  

문제

다음과 같은 (매우 간단한) Itemscontrol이 있습니다.

<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;

그러나 ... 두 번째 부분은 null을 반환 할 것이므로 다음과 같아야했습니다.

var checkBox = _itemsControl.ItemTemplate.FindName("MyCheckBox", container) as CheckBox;

그의 코드는 그것이 효과가 있었던 것처럼 보였지만, 내 경우에는 대신 이것을해야했습니다.

다음은 ItemsControl의 항목을 수용하는 컨테이너를 캡처하는 예입니다.

       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;

건배!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top