xaml 中的 x:datatype 出错
Getting error with the x:datatype in xaml
我的xaml代码
<Page x:Class="WindowsApp2.Views.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Behaviors="using:Template10.Behaviors"
xmlns:Core="using:Microsoft.Xaml.Interactions.Core"
xmlns:Interactivity="using:Microsoft.Xaml.Interactivity"
xmlns:controls="using:Template10.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:WindowsApp2.Views"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="using:WindowsApp2.ViewModels" mc:Ignorable="d">
<Page.DataContext>
<vm:MainPageViewModel x:Name="ViewModel" />
</Page.DataContext>
<RelativePanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ItemsControl ItemsSource="{x:Bind ViewModel.Detail,Mode=TwoWay}">
<ItemsControl.ItemTemplate>
<DataTemplate
x:DataType="vm:Details">
<TextBox Margin="200,200,0,0"
Text="{x:Bind name,Mode=TwoWay}"></TextBox>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</RelativePanel>
我的MainPageViewModel.cs
using Template10.Mvvm;
using System.Collections.Generic;
using System;
using System.Linq;
using System.Threading.Tasks;
using Template10.Services.NavigationService;
using Windows.UI.Xaml.Navigation;
using WindowsApp2.Views;
namespace WindowsApp2.ViewModels
{
public class Detail
{
public string name { get; set; }
public string pass { get; set; }
}
public class MainPageViewModel : ViewModelBase
{
public MainPageViewModel()
{
if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{
Value = "Designtime value";
}
Details = new List<Detail>();
for(int i=0;i<5;i++)
{
Detail d = new Detail();
d.name = "kalp"+i.ToString();
d.pass = "1234"+i.ToString();
Details.Add(d);
}
}
public List<Detail> Details { get; set; }
}
}
现在我的问题是我收到错误 "The name "Detail" does not exist in the namespace "using:WindowsApp2.ViewModels"。我的 Detail class 是在命名空间 [=27= 中定义的] . 那么这里有什么问题呢。
注意:我删除了一些与此错误无关的代码
您描述的错误是无法编译的无效绑定的副作用。
您正在尝试绑定到一个确实不存在的视图模型 属性 Detail
。您当然想要的是绑定到 Details
属性。
所以替换
<ItemsControl ItemsSource="{x:Bind ViewModel.Detail, Mode=TwoWay}">
和
<ItemsControl ItemsSource="{x:Bind ViewModel.Details, Mode=OneWay}">
这当然也需要有一个
public MainPageViewModel ViewModel { get; }
属性 在您的 MainPage class.
另请注意,TwoWay
绑定到 ItemsSource
属性 没有任何意义。它应该改为 OneWay
,或者可能是默认值 OneTime
。
我的xaml代码
<Page x:Class="WindowsApp2.Views.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Behaviors="using:Template10.Behaviors"
xmlns:Core="using:Microsoft.Xaml.Interactions.Core"
xmlns:Interactivity="using:Microsoft.Xaml.Interactivity"
xmlns:controls="using:Template10.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:WindowsApp2.Views"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="using:WindowsApp2.ViewModels" mc:Ignorable="d">
<Page.DataContext>
<vm:MainPageViewModel x:Name="ViewModel" />
</Page.DataContext>
<RelativePanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ItemsControl ItemsSource="{x:Bind ViewModel.Detail,Mode=TwoWay}">
<ItemsControl.ItemTemplate>
<DataTemplate
x:DataType="vm:Details">
<TextBox Margin="200,200,0,0"
Text="{x:Bind name,Mode=TwoWay}"></TextBox>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</RelativePanel>
我的MainPageViewModel.cs
using Template10.Mvvm;
using System.Collections.Generic;
using System;
using System.Linq;
using System.Threading.Tasks;
using Template10.Services.NavigationService;
using Windows.UI.Xaml.Navigation;
using WindowsApp2.Views;
namespace WindowsApp2.ViewModels
{
public class Detail
{
public string name { get; set; }
public string pass { get; set; }
}
public class MainPageViewModel : ViewModelBase
{
public MainPageViewModel()
{
if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{
Value = "Designtime value";
}
Details = new List<Detail>();
for(int i=0;i<5;i++)
{
Detail d = new Detail();
d.name = "kalp"+i.ToString();
d.pass = "1234"+i.ToString();
Details.Add(d);
}
}
public List<Detail> Details { get; set; }
}
}
现在我的问题是我收到错误 "The name "Detail" does not exist in the namespace "using:WindowsApp2.ViewModels"。我的 Detail class 是在命名空间 [=27= 中定义的] . 那么这里有什么问题呢。 注意:我删除了一些与此错误无关的代码
您描述的错误是无法编译的无效绑定的副作用。
您正在尝试绑定到一个确实不存在的视图模型 属性 Detail
。您当然想要的是绑定到 Details
属性。
所以替换
<ItemsControl ItemsSource="{x:Bind ViewModel.Detail, Mode=TwoWay}">
和
<ItemsControl ItemsSource="{x:Bind ViewModel.Details, Mode=OneWay}">
这当然也需要有一个
public MainPageViewModel ViewModel { get; }
属性 在您的 MainPage class.
另请注意,TwoWay
绑定到 ItemsSource
属性 没有任何意义。它应该改为 OneWay
,或者可能是默认值 OneTime
。