在Windows UWP项目中,我尝试绑定到此类中的以下属性
using System;
using System.Collections.ObjectModel;
namespace IAmOkShared.Models
{
public class Client
{
public Guid clientId { get; set; }
public string lastname { get; set; }
public DateTime timestamp { get; set; }
//- List af addresses of this client
public ObservableCollection<Address> clientaddresses;
public Client ()
{
clientId = Guid.Empty;
lastname = string.Empty;
timestamp = DateTime.Today;
clientaddresses = new ObservableCollection<Address>();
}
}
}
绑定到clientId和lastname没有问题,但是无法绑定到clientaddresses的一个或多个属性(例如,city,country)
我的XAML:
<DataTemplate x:Name="DetailTemplate" x:DataType="models:Client">
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="LastNameTextBlock" Text="{Binding lastname}" />
</StackPanel>
<StackPanel Orientation="Vertical">
<TextBlock x:Name="AddressTextBlock" Text="{Binding clientaddresses[0].city}" />
</StackPanel>
</StackPanel>
</DataTemplate>
知道如何解决这个问题吗? 史蒂芬
答案 0 :(得分:1)
您绑定到字段而不是属性。
public ObservableCollection<Address> clientaddresses;
将此更改为
public ObservableCollection<Address> Clientaddresses { get; private set; }
因此无法在viewmodel之外实例化,然后绑定应该起作用。
此外,您可以为地址创建其他数据模板,并在客户端的数据模板中使用整个集合,因为这样您就无法获得索引。如果您的ClientAddresses集合为空,则绑定异常。
<DataTemplate x:DataType="models:Address">
<TextBlock x:Name="AddressTextBlock" Text="{Binding city}" />
<DataTemplate>
<DataTemplate x:Name="DetailTemplate" x:DataType="models:Client">
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="LastNameTextBlock" Text="{Binding lastname}" />
</StackPanel>
<StackPanel Orientation="Vertical">
<ItemsControl ItemsSource="{Binding ClientAddresses}"/>
</StackPanel>
</StackPanel>
</DataTemplate>
另请注意,您的模型未实现INotifyPropertyChanged,因此当模型属性发生更改时,您的UI将不会更新。
后端私有字段的约定也是以小写字符开头,对于使用INotifyPropertyChanged的属性,你应该用大写字母启动属性。
private int myProperty;
public int MyProperty { get { ... } set { ... }}
答案 1 :(得分:0)
这就是为什么我们在其中创建ViewModel及其他属性
public Address ClientFirstAddress
{
get {return clientaddresses[0].city;}
}
然后将其绑定到View, 记得在设置clientaddresses集合
时为此属性调用NofityPropertyChanged