wind te Ответов: 3

Базовая привязка WPF к коллекции в combobox.


Что я делаю не так?
Основной привязки в поле со списком, что ItemsSource.

Что я уже пробовал:

С#
public partial class MainWindow : Window
    {
        ObservableCollection<string> _items = new ObservableCollection<string> { "a1", "a2" };


        public ObservableCollection<string> Items

        {

            get { return _items; }

            set { _items = value; }

        }
        public MainWindow()
        {
            InitializeComponent();
            var aa = a1;
        }
    }

код XAML

<StackPanel>
       <ComboBox Name="a1" ItemsSource="{Binding Items}">


       </ComboBox>
   </StackPanel>

3 Ответов

Рейтинг:
2

PureNsanity

Этот ответ находится далеко после публикации, и я надеюсь, что вы уже поняли его, но когда вы привязываетесь без источника, источником по умолчанию является свойство DataContext. В этом примере ваше свойство DataContext еще не задано. Самое простое решение в этом примере - сделать это:

public MainWindow()
{
    InitializeComponent();
    DataContext = this;
}


Лично я не рекомендую, чтобы представление было собственным DataContext, но если вы собираетесь это сделать, вы также должны сделать его открытым свойством, которое вы привязываете к DependencyProperty.


Рейтинг:
1

sacpundir

прочтите еще одну статью codeproject
Пошаговая привязка данных WPF с помощью Comboboxes[^]

Цитата:
ItemsSource - привязан к статическому массиву ресурсов 'ColorListString', который мы определили выше как ресурс приложения в файле App.xaml. Этот список элементов используется для заполнения коллекции элементов выпадающего списка. Эта коллекция используется для создания элементов, которые отображаются в раскрывающемся списке.
DisplayMemberPath - привязывается к свойству ValueString объекта ComboBoxItemString в списке ItemsSource. Когда элемент выбирается из выпадающего списка, это значение отображается пользователю.
SelectedValuePath - привязан к свойству ValueString объекта ComboBoxItemString в списке ItemsSource. Когда элемент выбирается из выпадающего списка, это свойство используется для получения значения для установки значения SelectedItem.
SelectedValue - привязывается с помощью привязки свойства "{Binding ColorString}". Когда элемент выбран в списке, это свойство объекта данных, которому присваивается значение, возвращаемое из свойства SelectedValuePath.


<pre><combobox itemssource="{StaticResource ColorListString}">
            DisplayMemberPath="ValueString" 
            SelectedValuePath="ValueString" 
            SelectedValue="{Binding ColorString}" /></combobox>


Рейтинг:
0

AdamWS

Привет.

Вы должны реализовать INotifyPropertyChanged для вас модель представления (класс с наблюдаемой коллекции).

Как только это будет сделано, вы будете использовать eventhandler, предоставляемый интерфейсом, чтобы ваш графический интерфейс знал об этом всякий раз, когда ваша коллекция обновляется.

Типично это выглядит так.

public class YourClass : INotifyPropertyChagned
{
    private ObservableCollection<string> _collectionOfStrings;
    public ObservableCollection<string> CollectionOfStrings
    {
        get => _collectionOfStrings
        set
        {
            if (value != _collectionOfStrings)
            {
                _listOfStrings = value;
                OnPropertyChagned("CollectionOfStrings");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName =
        null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}