我有一个C#和XAML项目,它涉及一个绑定到名为myList的Slides的ObservableCollection的GridView。 Slide有两个感兴趣的属性 - 名称和描述。默认情况下,GridView中的项目显示Name属性,但我想要一个按钮在显示Name和显示Description之间切换。
摘自幻灯片:
public class Slide : INotifyPropertyChanged {
private string _Name;
private string _Description;
public string Name {
get {
return this._Name;
} set {
//snipped for convenience: check that the property has changed and set it
}
}
public string Description {
get {
return this._Description;
} set {
//snipped for convenience: check that the property has changed and set it
}
}
/*etc...*/
}
XAML现在看起来像这样:
<GridView /*...*/ ItemsSource="{Binding myList}">
<GridView.ItemTemplate>
<DataTemplate>
<Grid /*...*/ >
<TextBlock /*...*/ Text="{Binding Name}" />
</Grid>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
当用户单击按钮时,我想以编程方式更改绑定到DataTemplate中TextBlock的Text字段的属性,从而更改GridView中的每个项目。我知道如何为单个XAML元素执行此操作,但我不确定如何为GridView中的动态内容执行此操作。有小费吗?
我剪掉了一堆似乎多余的代码,但如果您需要任何其他信息,请告诉我。
谢谢!
答案 0 :(得分:0)
也许我没有完全理解,但似乎你应该单独创建一个TextBlock控件,并在单击按钮时以编程方式隐藏/显示每个数据绑定TextBlock。
编辑:找到this答案,以帮助了解可见性方面(我没有太多的XAML经验)。如果这只能在数据绑定事件上执行,那么可以考虑创建一个全局布尔ShowName,当按下该按钮切换该布尔值时,然后启动GridView的数据绑定事件。然后该事件将检查布尔值并显示/隐藏正确的TextBlock。
答案 1 :(得分:0)
我做了必须写一些重复的XAML,但我不必复制整个GridView或做任何显示/隐藏技巧。我向Page.Resources添加了两个DataTemplates,如下所示:
<DataTemplate x:Key="SideATemplate" x:Name="SideATemplate">
<Grid Background="White" Width="400" Height="200">
<TextBlock /*snip*/ Text="{Binding Name}" />
</Grid>
</DataTemplate>
<DataTemplate x:Key="SideBTemplate" x:Name="SideBTemplate">
<Grid Background="White" Width="400" Height="200">
<TextBlock /*snip*/ Text="{Binding Description}" />
</Grid>
</DataTemplate>
在交换它们的按钮的事件处理程序中,我可以更改模板:
private void Flipbtn_Tapped(object sender, TappedRoutedEventArgs e)
{
if (/*Snip conditional stuff*/) {
SlidesGridView.ItemTemplate = SideBTemplate;
} else {
SlidesGridView.ItemTemplate = SideATemplate;
}
}