gpt4 book ai didi

c# - WPF C# 将标签绑定(bind)到包含自定义对象的 ObervableCollection 的 DataGrid

转载 作者:太空宇宙 更新时间:2023-11-03 10:45:01 25 4
gpt4 key购买 nike

好的,这是我的问题。我正在为我的 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"); }
}
}
}

这是属性类的代码(我想使用字典,但它不包含 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 中选择一个英雄,然后显示他的所有统计数据。不幸的是,显示属性对我不起作用。这是我尝试过的:

<TextBlock Text="{Binding ElementName=DataHeroes, Path=SelectedIndex.attributes[0].Value, Mode=OneWay}" Grid.Column="2"/>

关于我应该如何引用我的属性集合并显示所选属性有什么想法吗?

这个例子只涉及单个属性,稍后我会展开它们。

最佳答案

SelectedIndex 返回一个整数,它显然没有“attributes”属性。将您的线路更改为:

<TextBlock Text="{Binding ElementName=DataHeroes, Path=SelectedItem.attributes[0].Value, Mode=OneWay}" Grid.Column="2"/>

SelectedItem 返回在 UI 上选择的绑定(bind)对象。 ( MSDN )

请注意,如果选择了多个项目,这将返回用户选择的第一个项目。

关于c# - WPF C# 将标签绑定(bind)到包含自定义对象的 ObervableCollection 的 DataGrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23789967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com