【问题标题】:ComboBox to assign UserID value and User Object to entity组合框将用户 ID 值和用户对象分配给实体
【发布时间】:2018-02-05 03:03:51
【问题描述】:

我有一个 db 生成的实体:

public partial class UserMobileDevice
{
    public string DeviceID { get; set; }
    public string DeviceType { get; set; }
    public int UserID { get; set; }

    public virtual User User { get; set; }
}

现在我想连接一个选择用户并更新记录上的用户 ID 和用户对象的组合框。

这是我的 xaml:

<ComboBox Name="cboDefaultUser" 
          HorizontalAlignment="Stretch"
          VerticalAlignment="Top" 
          ItemsSource="{Binding Users}"
          DisplayMemberPath="Username"
          SelectedValuePath="UserID"
          SelectedValue="{Binding TheEntity.UserID, 
                                  UpdateSourceTrigger=PropertyChanged, 
                                  NotifyOnSourceUpdated=True, 
                                  NotifyOnValidationError=True, 
                                  Mode=TwoWay}" />

更新本地实体上的 UserID 就好了,但是 User 对象呢?我如何同时分配它?

(同样使用 MVVM)

[加法]

SelectedValue 绑定可以看出,我的ViewModel 在名为TheEntity 的property 中有entity。所以ViewModel 中实际上没有 UserID{get;set;} property,我也可以使用它来设置 User 对象。那我该怎么做呢?

【问题讨论】:

  • 您可以从已更新的用户 ID(来自 db)中找到一个用户对象,然后将 db 结果分配给用户对象。
  • 谢谢 我知道它来自哪里以及如何获得它。我的 ViewModel 中有一个用户列表。我会尝试在上面解释更多。

标签: c# wpf entity-framework mvvm combobox


【解决方案1】:

ComboBox 只会为您设置 一个 属性。如果您想同时设置 User 属性和 UserId 属性,您可以绑定到您在另一个相同类型的部分类定义中定义的自定义属性,并为您执行此操作:

public partial class UserMobileDevice
{
    public User UiUser
    {
        get { return User; }
        set
        {
            User = value;
            if (value != null)
                UserId = value.UserId;
        }
    }
}

然后将ComboBoxSelectedItem 属性绑定到这个:

<ComboBox Name="cboDefaultUser" 
          HorizontalAlignment="Stretch"
          VerticalAlignment="Top" 
          ItemsSource="{Binding Users}"
          DisplayMemberPath="Username"
          SelectedItem="{Binding TheEntity.UiUser, 
                                  UpdateSourceTrigger=PropertyChanged, 
                                  NotifyOnSourceUpdated=True, 
                                  NotifyOnValidationError=True}" />

尝试完全“按原样”使用自动生成的类型很少有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-09
    • 2016-10-06
    • 2011-08-31
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多