Silverlight组合框-设置SelectedItem MVVM
我有一个ViewModel,它设置“UserStructure”属性的值。问题是组合框不会绑定到该值Silverlight组合框-设置SelectedItem MVVM,silverlight,silverlight-4.0,mvvm,Silverlight,Silverlight 4.0,Mvvm,我有一个ViewModel,它设置“UserStructure”属性的值。问题是组合框不会绑定到该值 public class OwnerOccupierAccountViewModel : ViewModelBase { /// <summary> /// Load combobox structures /// </summary> private readonly LoadOperation<Structure> _loa
public class OwnerOccupierAccountViewModel : ViewModelBase
{
/// <summary>
/// Load combobox structures
/// </summary>
private readonly LoadOperation<Structure> _loadStructures;
private readonly LoadOperation<UnitOccupierDetail> _loadUnitOccupierDetails;
//public ICommand SaveAccountSettingsCommand { get; set; }
#region Properties
private ObservableCollection<Structure> _structures;
public ObservableCollection<Structure> Structures
{
get { return _structures; }
set
{
_structures = value;
RaisePropertyChanged("Structures");
}
}
private Structure _userStructure;
public Structure UserStructure
{
get { return _userStructure; }
set
{
_userStructure = value;
RaisePropertyChanged("SelectedStructure");
}
}
private UnitOccupierDetail _unitOccupierDetail;
public UnitOccupierDetail UnitOccupierDetail
{
get { return _unitOccupierDetail; }
set
{
_unitOccupierDetail = value;
RaisePropertyChanged("UnitOccupierDetail");
}
}
#endregion
public OwnerOccupierAccountViewModel()
{
// SaveAccountSettingsCommand = new DelegateCommand(SaveAccountSettings, CanSave);
UserAccountContext _userAccountContext;
if (!DesignerProperties.IsInDesignTool)
{
var loggedInUser = new Guid(WebContext.Current.User.UserID.ToString());
_userAccountContext = new UserAccountContext();
#region load structures
_loadStructures = _userAccountContext.Load(_userAccountContext.GetStructuresQuery());
_loadStructures.Completed += _loadStructuresCompleted;
#endregion
#region load user data
_loadUnitOccupierDetails =
_userAccountContext.Load(
_userAccountContext.GetUnitOccupierDetailsQuery().Where(
u => u.UserIDFK == loggedInUser && u.StructureFK == 92));
_loadUnitOccupierDetails.Completed += _loadUnitOccupierDetails_Completed;
#endregion
}
}
void _loadUnitOccupierDetails_Completed(object sender, EventArgs e)
{
_unitOccupierDetail= new UnitOccupierDetail();
_unitOccupierDetail = _loadUnitOccupierDetails.Entities.First();
_userStructure = _unitOccupierDetail.Structure;
}
void _loadStructuresCompleted(object sender, EventArgs e)
{
var theseStructures = new ObservableCollection<Structure>(_loadStructures.Entities);
Structures = theseStructures;
}
//private void SaveAccountSettings(object param)
//{
//}
//private static bool CanSave(object param)
//{
// return true;
//}
}
<ComboBox x:Name="cboApartments"
ItemsSource='{Binding Structures, Mode=TwoWay}'
DisplayMemberPath='StructureName'
SelectedValuePath='IDStructure'
SelectedItem='{Binding SelectedStructure,Mode=TwoWay}'
Width="200"
Height="25">
公共类OwnerOccupierAccountViewModel:ViewModelBase
{
///
///加载组合框结构
///
私有只读LoadOperation\u loadStructures;
私有只读LoadOperation\u loadUnitOccupierDetails;
//公共ICommand SaveAccountSettingsCommand{get;set;}
#区域属性
私有可观测集合结构;
公共收集结构
{
获取{return\u structures;}
设置
{
_结构=价值;
RaiseProperty变更(“结构”);
}
}
私有结构——用户结构;
公共结构用户结构
{
获取{return\u userStructure;}
设置
{
_用户结构=值;
RaisePropertyChanged(“SelectedStructure”);
}
}
私人单位占用详细信息(单位占用详细信息);;
公共单位占用者详细信息单位占用者详细信息
{
获取{return\u unitOccupierDetail;}
设置
{
_unitOccupierDetail=值;
RaisePropertyChanged(“UnitOccupierDetail”);
}
}
#端区
public OwnerOccupierAccountViewModel()
{
//SaveAccountSettingsCommand=newdelegateCommand(SaveAccountSettings,CanSave);
UserAccountContext\u UserAccountContext;
如果(!DesignerProperties.IsInDesignTool)
{
var loggedInUser=newGUID(WebContext.Current.User.UserID.ToString());
_userAccountContext=新的userAccountContext();
#区域荷载结构
_loadStructures=\u userAccountContext.Load(\u userAccountContext.GetStructuresQuery());
_loadStructures.Completed+=\u loadStructuresCompleted;
#端区
#区域加载用户数据
_loadUnitOccupierDetails=
_userAccountContext.Load(
_userAccountContext.GetUnitOccupierDetailsQuery()。其中(
u=>u.UserIDFK==loggedInUser&&u.StructureFK==92));
_loadUnitOccupierDetails.Completed+=\u loadUnitOccupierDetails\u Completed;
#端区
}
}
void\u loadUnitOccupierDetails\u已完成(对象发送方,事件参数e)
{
_unitOccupierDetail=新的unitOccupierDetail();
_unitOccupierDetail=\u loadUnitOccupierDetails.Entities.First();
_userStructure=\u unitOccupierDetail.Structure;
}
void\u loadStructuresCompleted(对象发送方,事件参数e)
{
var theseStructures=新的ObservableCollection(_loadStructures.Entities);
结构=这些结构;
}
//私有void SaveAccountSettings(对象参数)
//{
//}
//私有静态bool CanSave(对象参数)
//{
//返回true;
//}
}
尝试这些更改
public class OwnerOccupierAccountViewModel : ViewModelBase
{
/// <summary>
/// Load combobox structures
/// </summary>
private readonly LoadOperation<Structure> _loadStructures;
private readonly LoadOperation<UnitOccupierDetail> _loadUnitOccupierDetails;
//public ICommand SaveAccountSettingsCommand { get; set; }
#region Properties
private ObservableCollection<Structure> _structures;
public ObservableCollection<Structure> Structures
{
get { return _structures; }
set
{
_structures = value;
RaisePropertyChanged("Structures");
}
}
private Structure _userStructure;
public Structure UserStructure
{
get { return _userStructure; }
set
{
_userStructure = value;
RaisePropertyChanged("UserStructure");
}
}
private UnitOccupierDetail _unitOccupierDetail;
public UnitOccupierDetail UnitOccupierDetail
{
get { return _unitOccupierDetail; }
set
{
_unitOccupierDetail = value;
RaisePropertyChanged("UnitOccupierDetail");
}
}
#endregion
public OwnerOccupierAccountViewModel()
{
// SaveAccountSettingsCommand = new DelegateCommand(SaveAccountSettings, CanSave);
UserAccountContext _userAccountContext;
if (!DesignerProperties.IsInDesignTool)
{
var loggedInUser = new Guid(WebContext.Current.User.UserID.ToString());
_userAccountContext = new UserAccountContext();
#region load structures
_loadStructures = _userAccountContext.Load(_userAccountContext.GetStructuresQuery());
_loadStructures.Completed += _loadStructuresCompleted;
#endregion
#region load user data
_loadUnitOccupierDetails =
_userAccountContext.Load(
_userAccountContext.GetUnitOccupierDetailsQuery().Where(
u => u.UserIDFK == loggedInUser && u.StructureFK == 92));
_loadUnitOccupierDetails.Completed += _loadUnitOccupierDetails_Completed;
#endregion
}
}
void _loadUnitOccupierDetails_Completed(object sender, EventArgs e)
{
_unitOccupierDetail= new UnitOccupierDetail();
_unitOccupierDetail = _loadUnitOccupierDetails.Entities.First();
_userStructure = _unitOccupierDetail.Structure;
}
void _loadStructuresCompleted(object sender, EventArgs e)
{
var theseStructures = new ObservableCollection<Structure>(_loadStructures.Entities);
Structures = theseStructures;
}
//private void SaveAccountSettings(object param)
//{
//}
//private static bool CanSave(object param)
//{
// return true;
//}
}
<ComboBox x:Name="cboApartments"
ItemsSource='{Binding Structures, Mode=TwoWay}'
DisplayMemberPath='StructureName'
SelectedValuePath='IDStructure'
SelectedItem='{Binding UserStructure,Mode=TwoWay}'
Width="200"
Height="25">
公共类OwnerOccupierAccountViewModel:ViewModelBase
{
///
///加载组合框结构
///
私有只读LoadOperation\u loadStructures;
私有只读LoadOperation\u loadUnitOccupierDetails;
//公共ICommand SaveAccountSettingsCommand{get;set;}
#区域属性
私有可观测集合结构;
公共收集结构
{
获取{return\u structures;}
设置
{
_结构=价值;
RaiseProperty变更(“结构”);
}
}
私有结构——用户结构;
公共结构用户结构
{
获取{return\u userStructure;}
设置
{
_用户结构=值;
RaisePropertyChanged(“用户结构”);
}
}
私人单位占用详细信息(单位占用详细信息);;
公共单位占用者详细信息单位占用者详细信息
{
获取{return\u unitOccupierDetail;}
设置
{
_unitOccupierDetail=值;
RaisePropertyChanged(“UnitOccupierDetail”);
}
}
#端区
public OwnerOccupierAccountViewModel()
{
//SaveAccountSettingsCommand=newdelegateCommand(SaveAccountSettings,CanSave);
UserAccountContext\u UserAccountContext;
如果(!DesignerProperties.IsInDesignTool)
{
var loggedInUser=newGUID(WebContext.Current.User.UserID.ToString());
_userAccountContext=新的userAccountContext();
#区域荷载结构
_loadStructures=\u userAccountContext.Load(\u userAccountContext.GetStructuresQuery());
_loadStructures.Completed+=\u loadStructuresCompleted;
#端区
#区域加载用户数据
_loadUnitOccupierDetails=
_userAccountContext.Load(
_userAccountContext.GetUnitOccupierDetailsQuery()。其中(
u=>u.UserIDFK==loggedInUser&&u.StructureFK==92));
_loadUnitOccupierDetails.Completed+=\u loadUnitOccupierDetails\u Completed;
#端区
}
}
void\u loadUnitOccupierDetails\u已完成(对象发送方,事件参数e)
{
_unitOccupierDetail=新的unitOccupierDetail();
_unitOccupierDetail=\u loadUnitOccupierDetails.Entities.First();
_userStructure=\u unitOccupierDetail.Structure;
}
void\u loadStructuresCompleted(对象发送方,事件参数e)
{
var theseStructures=新的ObservableCollection(_loadStructures.Entities);
结构=这些结构;
}
//私有void SaveAccountSettings(对象参数)
//{
//}
//私有静态bool CanSave(对象参数)
//{
//返回true;
//}
}
更新:
嗯,也许可以在这里尝试更改:
<ComboBox x:Name="cboApartments"
ItemsSource='{Binding Structures, Mode=TwoWay}'
SelectedItem='{Binding UserStructure, Mode=TwoWay}'
Width="200"
Height="25">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=StructureName}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
在您的XAML SelectedItem中,它绑定到SelectedStructure,而不是您需要的UserStructure
void _loadUnitOccupierDetails_Completed(object sender, EventArgs e)
{
...
Structure userStructure = Structures.FirstOrDefault(s=>s.Equals(_unitOccupierDetail.Structure));
UserStructure = userStructure;
}