まず、私のコードを入れてみましょう。
StockGroup エンティティ タイプ
public partial class StockGroup
{
public StockGroup()
{
this.StockGroups = new HashSet<StockGroup>();
this.Stocks = new HashSet<Stock>();
}
public int ID { get; set; }
public string GroupName { get; set; }
public Nullable<int> ParentID { get; set; }
public Nullable<System.DateTime> CreatedOn { get; set; }
public Nullable<System.DateTime> ModifiedOn { get; set; }
public virtual ICollection<StockGroup> StockGroups { get; set; }
public virtual StockGroup Parent { get; set; }
public virtual ICollection<Stock> Stocks { get; set; }
public override string ToString() { return GroupName; }
public override bool Equals(object obj)
{
StockGroup stkGrp = obj as StockGroup;
if (stkGrp == null)
return false;
else
return ID.Equals(stkGrp.ID);
}
public override int GetHashCode()
{
return ID.GetHashCode();
}
}
Caliburn.Micro を使用して ComboBox にバインドする ViewModel のプロパティ。
private IList<StockGroup> _groupParents;
public IList<StockGroup> GroupParents
{
get
{
return _groupParents;
}
set
{
_groupParents = value;
NotifyOfPropertyChange(() => GroupParents);
}
}
コンボボックス XAML
<ComboBox Name="GroupParents" ToolTip="group parents"
Margin="5,0,5,5"
IsSynchronizedWithCurrentItem="True"
core:Message.Attach="[Event GotFocus]=[LoadGroupParents]"
IsEditable="True"
DisplayMemberPath="GroupName"
SelectedValuePath="ID"
IsReadOnly="False">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
ここまではすべて問題なく、コンボボックスはデータベースからすべてのデータを取得します。ComboBox で最初のレコードが選択されています。マウスを使用して別の ComboBox 項目を選択すると、選択された項目は変更できず、最初のレコードのままです。ComboBox の選択は KeyDown では機能しますが、Mouse では機能しません。
SelectedItem には、SelectedGroupParent というプロパティがあり、マウスで変更すると値が変わりますが、ComboBox TextBox には表示されません。
これに対するいくつかの修正を提案してください。私はずっと試しましたが、うまくいきません。CollectionView へのバインディングも機能していません。