Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight组合框-设置SelectedItem MVVM_Silverlight_Silverlight 4.0_Mvvm - Fatal编程技术网

Silverlight组合框-设置SelectedItem MVVM

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

我有一个ViewModel,它设置“UserStructure”属性的值。问题是组合框不会绑定到该值

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;
   }