Как получить данные из шаблона данных WPF с помощью c# - PullRequest
0 голосов
/ 28 января 2020

У меня есть шаблон данных с текстовыми полями в моем xaml, который получает данные из наблюдаемой коллекции.

        <c:NameList x:Key="NameListData"/>

    <DataTemplate x:Key="NameItemTemplate" x:Name="CredentialsofDomains">
        <Border Name="BorderControl" Background="Transparent" BorderThickness="0" Padding="0">
            <Grid>
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <TextBlock x:Name="DomainNameForCredentials" FontSize="18"  Grid.Row="2" Grid.Column="0" Text="{Binding Path=DomaineName}" Margin="0,0,40,0"></TextBlock>
            <Label Grid.Row="1" Grid.Column="1" Content="samAccountName"></Label>
            <Label Grid.Row="1" Grid.Column="2" Content="Passwort"></Label>
            <TextBox x:Name="samAccountNameForCredentials" Grid.Row="2" Grid.Column="1" Text="{Binding Path=LoginName}" Width="100" />
                <TextBox x:Name="passwordForCredentials" Grid.Row="2" Grid.Column="2" Text="{Binding Path=PassWord}" Width="100"/>
        </Grid>
        </Border>
    </DataTemplate>
                              <ListBox Width="auto"
                                 ItemsSource="{Binding Source={StaticResource NameListData}}"  
                                 ItemTemplate="{StaticResource NameItemTemplate}"  
                                 IsSynchronizedWithCurrentItem="True" />
                                <Fluent:Button Name="saveDomainCredentials" SizeDefinition="Large" VerticalAlignment="Bottom" HorizontalAlignment="Right" Header="Speichern" Click="SaveDomainCredentials_Click"></Fluent:Button>

Теперь я хочу получить отображаемые данные по нажатию кнопки, как теперь я могу получить значения для моего Нажмите «Событие»?

Вот код, стоящий за моей коллекцией:

public partial class NameList : ObservableCollection<SetCredentialsForAD>
{
    public NameList() : base()
    {
        using var forest = Forest.GetCurrentForest();
        Forest currentForest = Forest.GetCurrentForest();
        DomainCollection domains = currentForest.Domains;
        foreach (Domain objDomain in domains)
        {
            Add(new SetCredentialsForAD(objDomain.ToString(), "", ""));
        }
    }
}

public class SetCredentialsForAD
{
    private string loginName;
    private string passWord;
    private string domainName;

    public SetCredentialsForAD(string domain, string first, string last)
    {
        this.domainName = domain;
        this.loginName = first;
        this.passWord = last;
    }

    public string DomaineName
    {
        get { return domainName; }
        set { domainName = value; }
    }

    public string LoginName
    {
        get { return loginName; }
        set { loginName = value; }
    }

    public string PassWord
    {
        get { return passWord; }
        set { passWord = value; }
    }
}

И теперь мне нужно сохранить значения в настройках, чтобы использовать их в моем приложении. Каждому домену активной директории нужно имя и пароль, вот что я пытаюсь решить.

чтобы получить сообщение для каждого найденного предмета как validItem:

private void SaveDomainCredentials_OnClick(object sender, RoutedEventArgs e)
{
    foreach (var item in ListBox.SelectedItems.OfType<SetCredentialsForAD>())
    {
        MessageBox.Show("Domaine: " + item.DomaineName);
    }
}

1 Ответ

0 голосов
/ 28 января 2020

Можете ли вы показать код для источника данных? Это в коде файла Xaml? Исходя из того, что вы показали, это выглядит так.

Предполагая, что эти предположения верны, вам нужно будет использовать SelectedItem элемента ListBox. Так что нужно дать ListBox и x: Name. И в обработчике событий будет использоваться:

MyListBoxName.SelectedItem

Для получения элемента

Я не знаю ничего о настройке информации о Домене с использованием леса. Но если вы используете SelectedItem, вы получаете объект SetCredentialsForAD.

Использование

    public NameList() : base()
    {

        Add(new SetCredentialsForAD("domain 1", "name 1", "pwd 1"));
        Add(new SetCredentialsForAD("domain 2", "name 2", "pwd 2"));
        Add(new SetCredentialsForAD("domain 3", "name 3", "pwd 3"));
        Add(new SetCredentialsForAD("domain 4", "name 4", "pwd 4"));
    }

Затем в обработчике щелчков я могу привести SelectedItem к объекту SetCredentialsForAD

    if ( ListBox.SelectedItem is SetCredentialsForAD item )
    {
        Console.WriteLine(item.DomaineName);
        Console.WriteLine(item.LoginName);
        Console.WriteLine(item.PassWord);
    }

SelectedItems - это список объектов SetCredentialsForAD. Вам необходимо привести элементы в списке к нужному типу объекта. Ваш код даже не скомпилируется, вы не можете создать переменную с одинаковым именем дважды. Делать что хочешь было бы

    private void SaveDomainCredentials_OnClick(object sender, RoutedEventArgs e)
    {
        foreach (var item in ListBox.SelectedItems.OfType<SetCredentialsForAD>())
        {
            MessageBox.Show("Domaine: " + item.DomaineName);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...