2016-06-18 7 views
1

Mein XAML-CodeErste Fehler mit dem x: Datentyp in 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> 

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

Nun mein Problem ist, dass ich die Störung erhalte „Der Name "Detail" existiert nicht im Namespace "using: WindowsApp2.ViewModels". Meine Detail-Klasse ist im Namespace WindowsApp2.ViewModels definiert. Was ist das Problem hier. HINWEIS: Ich habe einen Code gelöscht, der nicht mit diesem Fehler zusammenhängt.

Antwort

0

Der Fehler, den Sie beschreiben, ist ein Nebeneffekt einer ungültigen Bindung, die nicht kompiliert werden kann.

Sie versuchen, an eine Ansicht Modelleigenschaft Detail zu binden, die tatsächlich nicht vorhanden ist. Was Sie sicherlich wollen, ist, stattdessen an die Details Eigenschaft zu binden.

ersetzen So

<ItemsControl ItemsSource="{x:Bind ViewModel.Detail, Mode=TwoWay}"> 

mit

<ItemsControl ItemsSource="{x:Bind ViewModel.Details, Mode=OneWay}"> 

Dies gilt natürlich auch verlangen, dass es einen in Ihrer Klasse Mainpage

public MainPageViewModel ViewModel { get; } 

Eigenschaft ist.

Beachten Sie auch, dass eine TwoWay Bindung auf der ItemsSource Eigenschaft keinen Sinn macht. Es sollte stattdessen OneWay oder wahrscheinlich die Standardeinstellung OneTime sein.