0

Полный вопрос такой: WPF. Мне нужно в Grid (или в каком элементе лучше? Я совсем зеленый) сделать динамически создаваемые кнопки, которые отображают имена найденных пользователей в AD. Как мне динамически создать кнопки и как передать в них каждый элемент из IEnumerable? Мой код IEnumerable string

 public IEnumerable<string> UsersList(string UserName)
        {
            DirectoryEntry rootDSE = new DirectoryEntry(GetCurrentDomainPath());
        DirectorySearcher userSearch = new DirectorySearcher(rootDSE)
        {
            PageSize = 50,
            Filter = &quot;(&amp;(objectCategory=User)(objectClass=person)(name=&quot; + UserName + &quot;*))&quot;
    };
        userSearch.PropertiesToLoad.Add(&quot;cn&quot;);

        using (var results = userSearch.FindAll())
        {
            foreach (SearchResult result in results)
            {
                yield return (string)result.Properties[&quot;name&quot;][0];
            }
        }
    }

SubMaroon
  • 1
  • 1
  • 2
    https://ru.stackoverflow.com/a/820820/220553 – EvgeniyZ Sep 02 '21 at 20:31
  • Мне кажется, что более уместным, чем создание кнопок здесь смотрится создание выпадающего списка. – A K Sep 04 '21 at 10:06

1 Answers1

0

если я правильно понял, то решение следующее: Xaml:

<Window x:Class="StackOverflowQuestHelp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:StackOverflowQuestHelp"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800" x:Name="ThisWindow">
<Window.DataContext>
    <local:MainWindowViewModel></local:MainWindowViewModel>
</Window.DataContext>
<Grid>
    <ItemsControl ItemsSource="{Binding Users}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal"></StackPanel>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Button Content="{Binding .}"></Button>
                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Grid></Window>

ViewModel:

public class MainWindowViewModel: INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged([CallerMemberName] string prop = "")
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(prop));
    }
    private IEnumerable<string> _Users;
    public IEnumerable<string> Users
    {
        get { return _Users; }
        set
        {
            _Users = value;
            OnPropertyChanged();
        }
    }
public MainWindowViewModel()
{
    ObservableCollection&lt;string&gt; Users = new ObservableCollection&lt;string&gt;();
    for (int i = 0; i &lt; 10; i++)//Генерируем пользователей у вас они должны подтягиваться из AD
    {
        Users.Add(&quot;User&quot; + i);
    }
    this.Users = Users;
}

}

Результат:

введите сюда описание изображения

Если вы хотите, действительно динамического обновления, то коллекция, которая будет биндится к ItemsControl должна реализовывать INotifyCollectionChanged, например ObservableCollection

Nick
  • 103
  • Всем спасибо! Я только только начинаю, поэтому не досмотрел и не знал про элемент ListBox. Сделал через него – SubMaroon Sep 19 '21 at 22:03