c# - 如何在 WPF(MVVM / 实体框架)中更新表单时显示从数据库到 TextBlock 的外键数据值?
问题描述
模式、描述显示在文本块中,但未显示外键值OpcUaEndpoint
。
我在这里想念什么?请帮忙。
Xaml 标记:
<ItemsControl Name="icName" Margin="10,10,10,10" ItemsSource="{Binding Scans}" Grid.IsSharedSizeScope="True" Grid.ColumnSpan="6" MouseDown="icName_MouseDown">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border x:Name="Border" Padding="8" BorderThickness="0 0 0 1" BorderBrush="{DynamicResource MaterialDesignDivider}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="Checkerz" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<ToggleButton VerticalAlignment="Center" IsChecked="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource MaterialDesignActionLightToggleButton}" Content="{Binding Code}" Grid.Column="0" />
<StackPanel Margin="30 0 0 0" Grid.Column="1">
<TextBlock FontWeight="Bold" Text="{Binding Name}" />
<TextBlock>
<Run Text="Mode: " />
<Run Text="{Binding Mode}" />
<Run Text=", " />
<Run Text="{Binding Description}" />
<Run Text="{Binding Scan.OpcUaEndpointRefID}" />
</TextBlock>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Code behind:
public ControlCenterView()
{
InitializeComponent();
var viewmodel = new ScanListViewModel();
ScanList.DataContext = viewmodel;
}
Modelview
public DB.model.OpcUaEndpoint OpcUaEndpoint
{
get { return _opcUaEndpoint; }
set
{
_opcUaEndpoint = value;
OnPropertyChanged("OpcUaEndpoint");
}
}
public IEnumerable<DB.model.OpcUaEndpoint> OpcUaEndpointsValues
{
get { return GetOpcUaEndpoints(); }
}
public IEnumerable<DB.model.Scan> ScanValues
{
get { return GetScans(); }
}
private IList<DB.model.OpcUaEndpoint> GetOpcUaEndpoints()
{
_opcUaEndpointsNames = new List<DB.model.OpcUaEndpoint>();
foreach (var opcpointname in opcUaEndpointsService.GetAll())
{
_opcUaEndpointsNames.Add(opcpointname);
}
return _opcUaEndpointsNames;
}
//OpcUaEndpoint Model
public class OpcUaEndpoint : PlantObject
{
/// <summary>
/// Get or Sets the Identifier.
/// </summary>
[Key]
public int OpcUaEndpointId { get; set; }
/// <summary>
/// name of the OpcUaEndpoints.
/// </summary>
[MaxLength(80)]
public string Name { get; set; }
/// <summary>
/// OpcUaEndpoint.
/// </summary>
[MaxLength(255)]
public string Endpoint { get; set; }
/// <summary>
/// description of the OpcUaEndpoints
/// </summary>
[MaxLength(255)]
public string Description { get; set; }
/// <summary>
///UserName of the OpcUaEndpoints
/// </summary>
[MaxLength(80)]
public string Username { get; set; }
/// <summary>
/// Password of the OpcUaEndpoints
/// </summary>
[MaxLength(512)]
public string Password { get; set; }
/// <summary>
/// RequestTimeout of the OpcUaEndpoints
/// </summary>
public int RequestTimeout { get; set; }
public ICollection<Scan> Scans { get; set; }
[NotMapped]
public bool IsSelected { get; set; }
[NotMapped]
public string SearchData { get; set; }
public override string ToString()
{
return Name;
}
}
//Scan Model
//its OpcUaEndpointId key to foreign key OpcUaEndpointRefId in Scan Model.
//And Scan Is Binded to Item control in Xaml.
public class Scan : PlantObject
{
[Key]
public int Id { get; set; }
public int ScanId { get; set; }
/// <summary>
/// name of the scan Mode.
/// </summary>
[MaxLength(80)]
public string Name { get; set; }
[MaxLength(255)]
public string Description { get; set; }
public string Code { get; set; }
**/// <summary>
/// Id of the OPC-UA Endpoint for the Scan
/// </summary>
[ForeignKey("OpcUaEndpoint")]
public int OpcUaEndpointRefId { get; set; }**
/// <summary>
/// Foreign key to OpcUaEndPoint
///
/// </summary>
public OpcUaEndpoint OpcUaEndpoint { get; set; }
[MaxLength(255)]
public string DrivingTag { get; set; }
[MaxLength(80)]
public string Operator { get; set; }
[MaxLength(80)]
public string Value { get; set; }
[MaxLength(80)]
public string DataMode { get; set; }
[NotMapped]
public bool IsSelected { get; set; }
public bool IsEnable { get; set; }
public DateTime? StartedOn { get; set; }
public DateTime? StoppedOn { get; set; }
[MaxLength(80)]
public string Status { get; set; }
}
解决方案
目前尚不清楚您的意图是引用 OpcUaEndpoint 中的属性还是视图模型中的属性。我认为问题在于直接绑定到 OpcUaEndpoint 的实例不能转换为字符串。
尝试这个:
<Run Text="{Binding OpcUaEndpointRefId}" />
或这个:
<Run Text="{Binding OpcUaEndpoint.OpcUaEndpointID}" />
推荐阅读
- eclipse - 如何通过 Eclipse RSE 在远程服务器上自动上传本地项目文件更改?
- wordpress - Facebook分享在wordpress中抛出403禁止错误
- c - C 宏仅更改函数调用而不更改函数定义
- reactjs - 为什么不能渲染这个?
- c# - C# 无法从 DateTimePicker 将 Null 保存在数据库中
- swift - Why is sort(by:) unavailable in extensions to MutableCollection?
- c# - How to return an image as an IActionResult from an Image/Bitmap object
- javascript - 如何将时间字符串中的毫秒舍入为分钟?
- python - 如何使用并行 ssh 执行“su”命令
- hibernate - java.lang.NoClassDefFoundError:休眠 5.3.1 中的 org/hibernate/cache/spi/TransactionalDataRegion