好的,所以这是我的问题。我正在为我的RPG系统创建一个简单的应用程序。这是一个可以创建英雄和查看统计数据的玩家的角色图表。所以,这是Hero的基类中的重要事项:
namespace CharacterChart.Classes
{
[DataContract(Name = "Character", Namespace = "http://www.jambs.com")]
abstract class Base : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
[DataMember]
private string Name;
[DataMember]
public ObservableCollection<Attribute> Attributes;
protected void OnPropertyChanged(string info)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(info));
}
}
public Base()
{
this.Name = "Nowa postać";
Attributes = new ObservableCollection<Attribute>();
Attributes.Add(new Attribute { Key = 'S', Value = 0 });
Attributes.Add(new Attribute { Key = 'Z', Value = 0 });
Attributes.Add(new Attribute { Key = 'P', Value = 0 });
Attributes.Add(new Attribute { Key = 'B', Value = 0 });
Attributes.Add(new Attribute { Key = 'C', Value = 0 });
Attributes.Add(new Attribute { Key = 'I', Value = 0 });
Attributes.Add(new Attribute { Key = 'W', Value = 0 });
Attributes.Add(new Attribute { Key = 'D', Value = 0 });
}
public string name
{
get { return Name; }
set { Name = value; OnPropertyChanged("Name"); }
}
public ObservableCollection<Attribute> attributes
{
get { return Attributes; }
set { Attributes = value; OnPropertyChanged("Attributes"); }
}
}
}
这是Attribute类的代码(我想使用Dictionary,但它不包含OnPropertyChanged):
class Attribute : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string info)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(info));
}
}
[DataMember]
private char key;
[DataMember]
private byte number;
public char Key
{
get { return key; }
set { key = value; OnPropertyChanged("Key"); }
}
public byte Value
{
get { return number; }
set { number = value; OnPropertyChanged("Value"); }
}
}
在主程序中,我正在声明ObservableCollection的英雄,并为Datagrid设置了ItemsSource。在XAML中它就是这样的:
<DataGrid Name="DataHeroes" Grid.Column="0" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Path=name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<DataGridTextColumn Header="Strength" Binding="{Binding Path=attributes[0].Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataGrid.Columns>
</DataGrid>
现在我想添加一个功能,让我在DataGrid中选择一个Hero然后显示他的所有统计数据。不幸的是,显示属性对我不起作用。这是我试过的:
<TextBlock Text="{Binding ElementName=DataHeroes, Path=SelectedIndex.attributes[0].Value, Mode=OneWay}" Grid.Column="2"/>
任何想法我应该如何参考我的属性集并显示所选属性?
此示例仅指单个属性,稍后我将对其进行扩展。
答案 0 :(得分:2)
SelectedIndex
返回一个整数,显然没有“attributes”属性。将您的行更改为:
<TextBlock Text="{Binding ElementName=DataHeroes, Path=SelectedItem.attributes[0].Value, Mode=OneWay}" Grid.Column="2"/>
SelectedItem
返回在UI上选择的绑定对象。 (MSDN)
请注意,如果选择了多个项目,则会返回第一个用户所选项目。