我想在app.xaml.cs中定义的类数组的xaml数据中显示。
继承人我做了什么。
保存数据的类。 Person.cs
public class Person : INotifyPropertyChanged
{
#region Constructors and Destructors
public Person(int id, string name)
{
this.Name = name;
this.Id = id;
}
#endregion
#region Public Events
public event PropertyChangedEventHandler PropertyChanged;
#endregion
#region Public Properties
public int Id { get; set; }
public string Name { get; set; }
#endregion
#region Methods
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
Person在App.xaml.cs中声明如此。
public partial class App : Application
{
public static Person[] People =
{
new Person(1, "John"),
new Person(2, "Jake"),
new Person(3, "James"),
new Person(4, "Jack")
};
}
我想在xaml中显示数据。我似乎无法弄清楚如何做到这一点。
<StackPanel>
<StackPanel Orientation="Horizontal">
<TextBox Height="23" TextWrapping="Wrap" Text="id"/>
<TextBox Height="23" TextWrapping="Wrap" Text="name"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBox Height="23" TextWrapping="Wrap" Text="id"/>
<TextBox Height="23" TextWrapping="Wrap" Text="name"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBox Height="23" TextWrapping="Wrap" Text="id"/>
<TextBox Height="23" TextWrapping="Wrap" Text="name"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBox Height="23" TextWrapping="Wrap" Text="id"/>
<TextBox Height="23" TextWrapping="Wrap" Text="name"/>
</StackPanel>
</StackPanel>
感谢。
答案 0 :(得分:3)
您应该使用集合控件,例如ItemsControl
并将其ItemsSource
绑定到您的静态属性:
<ItemsControl ItemsSource="{Binding ...}">
<ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBox Height="23" TextWrapping="Wrap" Text="{Binding Id}" />
<TextBox Height="23" TextWrapping="Wrap" Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
</ItemTemplate>
</ItemsControl>
您不应该使用静态属性,而是将一个服务注入到您的视图模型中(该视图充当此视图的数据上下文),并确保此服务是单例。
您还需要在PropertyChanged
属性的设置者中调用Person
事件,以便通知用户界面。
如果你想坚持使用静态属性,那么看看here。
答案 1 :(得分:1)
通常使用ItemsControl
或其中一个子类是可行的方法。如果您希望xaml与原始帖子中输入的完全相同,那么这就是实现它的方法:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:a="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525">
<StackPanel DataContext="{x:Static a:App.People}">
<StackPanel Orientation="Horizontal">
<TextBox Height="23" TextWrapping="Wrap" Text="{Binding [0].Id}"/>
<TextBox Height="23" TextWrapping="Wrap" Text="{Binding [0].Name}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBox Height="23" TextWrapping="Wrap" Text="{Binding [1].Id}"/>
<TextBox Height="23" TextWrapping="Wrap" Text="{Binding [1].Name}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBox Height="23" TextWrapping="Wrap" Text="{Binding [2].Id}"/>
<TextBox Height="23" TextWrapping="Wrap" Text="{Binding [2].Name}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBox Height="23" TextWrapping="Wrap" Text="{Binding [3].Id}"/>
<TextBox Height="23" TextWrapping="Wrap" Text="{Binding [3].Name}"/>
</StackPanel>
</StackPanel>
</Window>
有关xaml中属性路径的更多信息,请查看此处:http://msdn.microsoft.com/en-us/library/ms742451(v=vs.110).aspx。