我有一个数据库,我抓住了我的“Baustellen”。现在我想通过DataBinding在ListView上显示它们的“strasse”,但它们没有显示出来。你知道为什么吗?
Baustelle.cs:
namespace SchlachterFliesen.Code
{
public class Baustelle
{
public int id;
public Kunde bauherr;
public Kunde auftraggeber;
public Ort ort;
public string strasse, hausnr, bauauftrag, status;
public Baustelle()
{
}
public Baustelle(int id, Kunde bauherr, Kunde auftraggeber, Ort ort, string strasse, string hausnr, string bauauftrag, string status)
{
this.id = id;
this.bauherr = bauherr;
this.auftraggeber = auftraggeber;
this.ort = ort;
this.strasse = strasse;
this.hausnr = hausnr;
this.bauauftrag = bauauftrag;
this.status = status;
}
public override string ToString()
{
return
"Baustelle@" + GetHashCode() + "\r\n" +
"ID: " + id + "\r\n" +
"Bauherr: " + bauherr?.name + "\r\n" +
"Auftraggeber: " + auftraggeber?.name + "\r\n" +
"Ort: " + ort?.name + "\r\n" +
"Straße: " + strasse + "\r\n" +
"Hausnummer: " + hausnr + "\r\n" +
"Bauauftrag: " + bauauftrag + "\r\n" +
"Status: " + status;
}
}
}
Baustelle.xaml.cs
namespace SchlachterFliesen
{
/// <summary>
/// Eine leere Seite, die eigenständig verwendet oder zu der innerhalb eines Rahmens navigiert werden kann.
/// </summary>
public sealed partial class Baustelle : Page
{
private List<Code.Baustelle> Baustellen;
public Code.Baustelle[] baustellen;
public Baustelle()
{
this.InitializeComponent();
Daten.LadeAlleBaustellen(new Daten.Ziel<Code.Baustelle[]>(empfaenger)); //HERE I GRAB THEM!
}
public void empfaenger(Code.Baustelle[] baustellen)
{
this.baustellen = baustellen;
Baustellen = GetBaustellen();
}
public List<Code.Baustelle> GetBaustellen()
{
var baustellenListe = new List<Code.Baustelle>();
if (baustellen.Length > 0)
{
for (int i = 0; i < baustellen.Length; i++)
{
baustellenListe.Add(new Code.Baustelle(baustellen[i].id, baustellen[i].bauherr, baustellen[i].auftraggeber, baustellen[i].ort, baustellen[i].strasse, baustellen[i].hausnr, baustellen[i].bauauftrag, baustellen[i].status));
}
}
//myTextBlock.Text = res;
return baustellenListe;
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
var currentView = SystemNavigationManager.GetForCurrentView();
currentView.AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
currentView.BackRequested += backButton_Tapped;
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
var currentView = SystemNavigationManager.GetForCurrentView();
currentView.AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed;
currentView.BackRequested -= backButton_Tapped;
}
private void backButton_Tapped(object sender, BackRequestedEventArgs e)
{
var rootFrame = Window.Current.Content as Frame;
var mainPage = rootFrame.Content as MainPage;
if (rootFrame != null && rootFrame.CanGoBack)
{
e.Handled = true;
rootFrame.Navigate(typeof(MainPage));
rootFrame.GoBack();
}
}
}
}
Baustelle.xaml
<Page
x:Class="SchlachterFliesen.Baustelle"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:SchlachterFliesen"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:data ="using:SchlachterFliesen.Code"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Frame Name="baustelleFrame">
<Grid>
<ListView Name="baustellenListView" ItemsSource="{x:Bind Baustellen}" HorizontalAlignment="Center">
<ListView.ItemTemplate>
<DataTemplate x:DataType="data:Baustelle">
<StackPanel>
<TextBlock FontSize="10" Text="{x:Bind strasse}"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Frame>
</Grid>
</Page>
答案 0 :(得分:0)
价值观&#34; strasse,hausnr,bauauftrag,status&#34;需要是属性,例如公共场所Strasse {get;组;而不是然后绑定到那些应该工作的 - 你可能需要将列表的数据源设置为项目列表。
答案 1 :(得分:0)
您应该使用ObservableCollection<Baustelle>
代替List<Baustelle>
。
答案 2 :(得分:0)
我已将您的代码粘贴到一个全新的应用程序中,进行最小的调整以使其在您的环境之外进行编译。绑定工作正常:
我无法访问您用于加载数据的代码,所以我稍微调整了一下代码(比如重命名页面使其与模型类名称不同):
public BaustellePage()
{
this.InitializeComponent();
Empfänger(
new Baustelle(1, "herr 1", "auf 1", "ort 1", "strasse 1", "42", "50", "good"),
new Baustelle(2, "herr 2", "auf 2", "ort 2", "strasse 2", "42", "50", "good"),
new Baustelle(3, "herr 3", "auf 3", "ort 3", "strasse 3", "42", "50", "good"));
}
public void Empfänger(params Baustelle[] baustellen)
{
this.baustellen = baustellen;
Baustellen = GetBaustellen();
}
(为简单起见,我还将Kunde
和Ort
替换为string
。)
在您自己的代码中,如果您在Empfänger
的开头设置断点(请注意,'ä'是允许的)。你看到有什么数据吗?
如果是,您的绑定应该有效。如果不是,那你就在那里找到了问题。
无关,但是:您可以大大简化您的代码。以下是一个示例:
private List<Baustelle> Baustellen;
public BaustellePage()
{
InitializeComponent();
Empfänger(
new Baustelle(1, "herr 1", "auf 1", "ort 1", "strasse 1", "42", "50", "good"),
new Baustelle(2, "herr 2", "auf 2", "ort 2", "strasse 2", "42", "50", "good"),
new Baustelle(3, "herr 3", "auf 3", "ort 3", "strasse 3", "42", "50", "good"));
}
private void Empfänger(params Baustelle[] baustellen)
{
var baustellenListe = new List<Baustelle>();
baustellenListe.AddRange(baustellen);
Baustellen = baustellenListe;
}
(GetBaustellen
已消失,(公共?)baustellen
字段也不见了。)