Кажется, никто еще не нашел способ установить comboboxitem как выбранный с помощью SelectedItem = "Binding Property".
Является ли решение использовать свойство IsSelected в объекте ViewModel в источнике items combobox?
Кажется, никто еще не нашел способ установить comboboxitem как выбранный с помощью SelectedItem = "Binding Property".
Является ли решение использовать свойство IsSelected в объекте ViewModel в источнике items combobox?
Наш успешный подход к привязке combobox следующий:
<ComboBox
ItemsSource="{Binding Path=AllItems}"
SelectedItem={Binding Path=CurrentItem, Mode=TwoWay} />
<TextBlock Text="{Binding Path=CurrentItem, Mode=TwoWay}" />
class public ItemListViewModel
{
public ObservableCollection<Item> AllItems {get; set;}
private Item _currentItem;
public Item CurrentItem
{
get { return _currentItem; }
set
{
if (_currentItem == value) return;
_currentItem = value;
RaisePropertyChanged("CurrentItem");
}
}
}
Не уверен, почему вы не можете привязать данные к SelectedItem на ComboBox, не видя свой код. Ниже показано, как это сделать, используя CollectionView, который поддерживает текущее управление элементами, в котором поддерживаются combobox. CollectionView имеет свойство CurrentItem get, которое вы можете использовать для выбора в настоящее время.
XAML:
<Window x:Class="CBTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<StackPanel>
<ComboBox
ItemsSource="{Binding Path=Names}"
IsSynchronizedWithCurrentItem="True">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock Text="{Binding Path=Names.CurrentItem}" />
</StackPanel>
</Window>
Код позади:
using System.Collections.Generic;
using System.Windows;
using System.Windows.Data;
namespace CBTest
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
DataContext = new VM();
}
}
public class VM
{
public VM()
{
_namesModel.Add("Bob");
_namesModel.Add("Joe");
_namesModel.Add("Sally");
_namesModel.Add("Lucy");
Names = new CollectionView(_namesModel);
// Set currently selected item to Sally.
Names.MoveCurrentTo("Sally");
}
public CollectionView Names { get; private set; }
private List<string> _namesModel = new List<string>();
}
}