26

私は次の(非常に単純な)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...
}

それ、どうやったら出来るの?

4

4 に答える 4

29

OK、ケントは信用を得ますが、それはほとんど正しかっただけです:)

// This part was good:
var container = _itemsControl.ItemContainerGenerator.ContainerFromItem(dahCurrentItem) as FrameworkElement;

しかし... 2番目の部分はnullを返すため、次のようにする必要がありました:

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

彼のコードは機能しているように見えましたが、私の場合は、代わりにこれを行う必要がありました。

于 2009-03-02T20:03:57.037 に答える
0

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

それが役立つことを願っています。

于 2011-03-03T18:45:04.093 に答える