バインドするコンボボックスがありますObservableCollection<CustomerViewModel>
<ComboBox ItemsSource="{Binding AllCustomers}" IsEditable="True"/>
DisplayMemberPath プロパティを使用すると、ドロップダウンと選択した項目が正しく表示されます
<ComboBox ItemsSource="{Binding AllCustomers}" DisplayMemberPath="CustomerName" IsEditable="True"/>
ただし、DataTemplate が割り当てられている場合、選択したアイテムは正しく表示されません
<ComboBox ItemsSource="{Binding AllCustomers}" SelectedValue="CustomerName" IsEditable="True">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding CustomerName}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ComboBox>
編集: 問題は見つかりましたが、解決策は見つかりませんでした。問題は、ComboBox に IsEditable="True" がある場合に問題が発生することです。
コードの要約:
public class AllCustomersViewModel
{
public ObservableCollection<CustomerViewModel> AllCustomers {get; set;}
}
public class CustomerViewModel
{
public string CustomerName;
public short CustomerID;
}
選択した値/項目を正しく表示するために、どのプロパティ (またはどのように) を設定するか。
事前にどうもありがとうございました。
実際のコード
public class AccountTransactionsViewModel
{
DataRepository _repository;
public AccountTransactionsViewModel()
{
_repository = new DataRepository();
CreateAccountsViewModel();
}
public ObservableCollection<AccountViewModel> AllAccounts { get; set; }
void CreateAccountsViewModel()
{
List<AccountViewModel> allAccounts = _repository.GetAccounts()
.Select(a => new AccountViewModel(a, _repository))
.ToList();
AllAccounts = new ObservableCollection<AccountViewModel>(allAccounts);
}
}
public class AccountViewModel
{
Account _account;
DataRepository _repository;
public AccountViewModel(Account account, DataRepository repository)
{
_account = account;
_repository = repository;
}
public short AccountID { get { return _account.AccountID; } set { } }
public string AccountName { get { return _account.AccountName; } set { } }
}
XAML:
<ComboBox Name="customerCombobox" ItemsSource="{Binding AllAccounts}" IsEditable="True">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding AccountName}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ComboBox>
編集:
問題は見つかりましたが、解決策ではありません。問題は、ComboBox に IsEditable="True" がある場合に問題が発生することです。