所以我有一个自定义的GridView,其中包含一个包含TextBox的数据模板,并由一个名为Player的自定义类列表填充。我需要能够检索Player的实例和TextBox中的文本,并将它们保存到名为Score的新自定义类中。
<GridView x:Name="gridScore" ItemsSource="{x:Bind PlayerList}" IsItemClickEnabled="True">
<GridView.ItemTemplate>
<DataTemplate x:DataType="data:Player">
<StackPanel Orientation="Horizontal">
<TextBox x:Name="txtbxGridScore" TextChanged="txtbxGridScoreChangedEventHandler" />
<Image Source="{x:Bind ProfilePicture}"/>
<StackPanel VerticalAlignment="Center">
<TextBlock Text="{x:Bind FullName}" />
<TextBlock Text="{x:Bind Alias}" />
</StackPanel>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
<Button x:Name="buttonSave" Content="Save Scores" Style="{StaticResource BarButtonStyle}" Click="buttonSave_Click"/>
我来自基于网络的Java背景,所以这对我来说有点新鲜,但似乎应该是一个相当简单的练习。
最初,我尝试在按钮单击时迭代GridView并抓取每个播放器项目以及TextBox文本并将它们保存到List&lt;&gt;然而,获得TextBox值证明很麻烦。
然后我尝试初始化页面范围List&lt;&gt;每次TextBox值改变时,得分和简单更新,但是,我也无法做到这一点。
任何一种方法的解决方案都可以用于我的目的。任何意见都表示赞赏!
答案 0 :(得分:0)
如果我理解正确,这是解决问题的方法之一。
因此,我们假设您的模型类Player具有以下结构:
public class Player {
public int PlayerID { get; set; }
public string ProfilePicture { get; set; }
public string FullName { get; set; }
public string Alias { get; set; }
public float PlayerScore { get; set; } // To store textbox value
}
因此,您可以使用双向绑定来解决此问题。
XAML部分看起来像这样:
<GridView x:Name="gridScore"
ItemsSource="{x:Bind PlayerList}"
IsItemClickEnabled="True">
<GridView.ItemTemplate>
<DataTemplate x:DataType="data:Player">
<StackPanel Orientation="Horizontal">
<TextBox x:Name="txtbxGridScore"
Text="{x:Bind PlayerScore, Mode=TwoWay}" />
<Image Source="{x:Bind ProfilePicture}" />
<StackPanel VerticalAlignment="Center">
<TextBlock Text="{x:Bind FullName}" />
<TextBlock Text="{x:Bind Alias}" />
</StackPanel>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
<Button x:Name="buttonSave"
Content="Save Scores"
Click="buttonSave_Click" />
我用一些虚拟数据初始化了你的PlayerList:
PlayerList = new ObservableCollection<Player>() {
new Player() {
FullName = "Player A", Alias = "AAA"
},
new Player () {
FullName = "Player B", Alias = "BBB"
}
};
正如您在XAML中所看到的,我将文本框与Player模型的PlayerScore属性绑定。
当我运行此应用程序时,我得到这样的屏幕:
当我点击“保存”时,它将触发您在“按钮部分”中编写的事件
在那种情况下,我有一个foreach循环将遍历列表和一个断点,正如你在第一项“玩家A”上看到的那样,PlayerScore值为10:
现在,您可以找到具有某些ID属性或您想要的其他方式的玩家。这是实现您想要的最简单的方法。
备注:这可以通过更好的方式使用MVVM模式和其他东西来解决,但正如你提到的那样,你是初学者,所以也许你最好这样解决它,之后再去更先进的技术。希望这对你有所帮助。