gpt4 book ai didi

c# - uwp xaml DataBinding 到 ObservableCollection 内的嵌套属性

转载 作者:行者123 更新时间:2023-12-03 10:43:01 26 4
gpt4 key购买 nike

这是我第一次构建 UWP 应用程序,而且我通常是 c#/Windows 的新手。我正在尝试在 UI 中使用 Pivot。我希望数据透视表头来自 ObservableCollection连接的 USB 设备的数量,按类别 Device_Info .每个 USB 设备都有一个名为 HardwareRevNumMajor 的属性。我想显示为每个枢轴标题。我的 xml 看起来像这样:

<Page
x:Class="usb_test.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:usb_test"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:code="using:usb_test"
mc:Ignorable="d">
<Page.DataContext>
<local:View_Model/>
</Page.DataContext>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Pivot x:Name="pivot1" Title="Pivot" Opacity="0.99" ItemsSource="{Binding Devices}">
<Pivot.HeaderTemplate>
<DataTemplate>
<TextBlock>
<TextBlock.Text>
<Binding Path="Device_Info.HardwareRevNumMajor"/>
</TextBlock.Text>
</TextBlock>

<!--<TextBlock Text="{Binding HardwareRevNumMajor}">
</TextBlock>-->
</DataTemplate>
</Pivot.HeaderTemplate>
<Pivot.ItemTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding DeviceFiles}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding numBlocks}"/>
<TextBlock Text="{Binding syncTime}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</Pivot.ItemTemplate>
</Pivot>
</Grid>

只要一个 Device_Info对象被添加到 Devices observableCollection 我得到一个错误。 Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED)) .然后,如果我在设计器中单击 MainPage.xaml 文件,我会看到:
TargetException: Object does not match target type.
StackTrace:
at System.Reflection.RuntimeMethodInfo.CheckConsistency(Object target)
at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj,
BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, Object[] index)
InnerException: None

您可以从上面的 xaml 中看到,我尝试了多种方法来显示 HarwareRevNumMajor居住在 Device_Info 上的属性(property)被注释掉的 TextBlock代码。

我的 ViewModel 看起来像这样:
namespace usb_test
{
public class View_Model
{
public ObservableCollection<Device_Info> _devices;
public ObservableCollection<File_Info> _deviceFiles;
public CoreDispatcher _dispatcher;
public View_Model() {
_devices = new ObservableCollection<Device_Info>();
_deviceFiles = new ObservableCollection<File_Info>();
}

public ObservableCollection<Device_Info> Devices
{
get
{
return _devices;
}
}

public ObservableCollection<File_Info> DeviceFiles
{
get
{
return _deviceFiles;
}
}

在我的 MainPage.xaml.cs 我有这个:
namespace usb_test
{
public sealed partial class MainPage : Page
{
Device_List devList = new Device_List();
Device_Structure deviceStruct = new Device_Structure();
View_Model viewModel = new View_Model();
public MainPage()
{
this.InitializeComponent();
viewModel._dispatcher = Dispatcher;
this.DataContext = viewModel;
devList.devices.CollectionChanged += this.OnCollectionChanged;
deviceStruct.deviceFiles.CollectionChanged += this.OnCollectionChanged;
...

这行代码将设备添加到列表中:
await viewModel._dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => { devList.devices.Add(devInfo); });

此行成功并添加了 Dev_Info对象放入设备 observableCollection 并在应用程序崩溃后不久。

我确信当我稍后尝试在 xaml 中显示文件信息时会出现更多错误,但我真的很感激让数据透视表头正确显示。就像我说的那样,我对此很陌生,所以我假设存在许多问题,对于阻止我无法显示 Dev_Info 的属性的任何建议/澄清,我将不胜感激。目的。

谢谢!

最佳答案

您的元素来自 Devices属于 Device_Info 类型.在您的 DataTemplate您将 text 属性绑定(bind)到 Device_Info.HardwareRevNumMajor .由于上下文是您的项目 (Device_Info),因此您尝试访问属性 Device_Info。

如果你写:

<TextBlock Text="{Binding HardwareRevNumMajor}" />

您尝试访问属性 HardwareRevNumMajor至尊可能存在于 Device_Info 中。

关于c# - uwp xaml DataBinding 到 ObservableCollection 内的嵌套属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45739498/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com