Попытка показать элемент комбинированного списка в текстовом поле в WPF C# с использованием selectedChanged - PullRequest
0 голосов
/ 27 апреля 2020

Вот метод:

private void Capitales_SelectedChanged(object sender, RoutedEventArgs e)
{
    string s = Capitales.SelectedItem.ToString();
    tb.Text = "Selection: " + s;
}

Я помещаю список в поле со списком, и когда я компилирую программу, текстовое поле показывает следующее: ComboBox_MicroDocu.MainWindow + Ciudades, где "Ciudades" ссылается на мой класс.

1 Ответ

0 голосов
/ 27 апреля 2020

Вы пишете приложение WPF так же, как и в Winform. Это должно работать, но есть лучший способ сделать это. Используйте MVVM (модель представления ViewModel). MVVM хорош, поскольку он позволяет вам отделить ваши представления (xaml) от вашей бизнес-логики c (viewModels). Это также отлично подходит для тестируемости. Ознакомьтесь с некоторыми хорошими ресурсами здесь https://www.tutorialspoint.com/mvvm/index.htm

Вот как должен выглядеть ваш код:

MainWindow.xaml

<Window x:Class="WpfApp1.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:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" >
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <ComboBox Grid.Column="0" ItemsSource="{Binding Elements}" SelectedItem="{Binding SelectedElement}"/>
        <TextBox Grid.Column="1" Text="{Binding SelectedElement}"/>
    </Grid>
</Window>

MainWindow. xaml.cs

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = new ViewModel();
    }
}

ViewModel.cs

public class ViewModel : INotifyPropertyChanged
{
    private string _selectedElement;

    public IEnumerable<string> Elements
    {
        get
        {
            for(int i = 0; i < 10; i++)
            {
                yield return $"Element_{i}";
            }
        }
    }

    public string SelectedElement
    {
        get
        {
            return _selectedElement;
        }

        set
        {
            _selectedElement = value;
            RaisePropertyChanged();
        }
    }

    private void RaisePropertyChanged([CallerMemberName] String propertyName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...