C# 4.0 从可观察集合动态创建按钮
我有一个我正在解析的可观察集合。在这个集合中,我检查name属性是否为“critical”,如果为“critical”,那么我将尝试为每次出现的属性动态创建红色按钮C# 4.0 从可观察集合动态创建按钮,c#-4.0,windows-8,windows-runtime,C# 4.0,Windows 8,Windows Runtime,我有一个我正在解析的可观察集合。在这个集合中,我检查name属性是否为“critical”,如果为“critical”,那么我将尝试为每次出现的属性动态创建红色按钮 if (OBSCollection.Any(p => p.Name == "Critical")) { criticalcount = OBSCollection.Where(x => x.Name == "Critical").T
if (OBSCollection.Any(p => p.Name == "Critical"))
{
criticalcount = OBSCollection.Where(x => x.Name == "Critical").ToList().Count;
for (int i = 0; i < criticalcount; i++)
{
Button temp = new Button();
temp.Background = new SolidColorBrush(Windows.UI.Colors.Red);
temp.Width = 200;
temp.Height = 100;
temp.Content = "Critical";
CriticalPanel.Children.Add(temp);
temp.Tapped += new TappedEventHandler(bTapped_Tapped);
}
private void bTapped_Tapped(object sender, TappedRoutedEventArgs e)
{
var toremovecritical = OBSCOllection.Where(x => x.Name == "critical").First();
uiElements.Remove(toremovecritical);
}
if(obscolection.Any(p=>p.Name==“Critical”))
{
criticalcount=OBSCollection.Where(x=>x.Name==“Critical”).ToList().Count;
对于(int i=0;ix.Name==“critical”).First();
uiElements.Remove(删除关键元素);
}
现在,上面的代码只在“Critical”属性出现一次时有效。我如何重写代码以适用于多次出现,从而创建多个按钮
同样在显示按钮后,如果用户单击按钮,则按钮可见属性应折叠,并且该特定项应从可观察集合中移除。我可以从可观察集合中移除按钮,但我无法从bTapped_Tapped handler中将按钮的可见性属性设置为false。是否有其他设置如何解决这个问题?这里是一个使用MVVM的非常基本的示例 XAML: 这是一个关于如何使用绑定和MVVM的非常简单的示例,它为您的要求提供了一个起点
希望有帮助。没有回答您的直接问题,但我想这需要一个数据模板(在您的ListView或GridView上),该模板包含按钮,并在名称值为“关键”时(通过绑定中的转换器)将可见性设置为可见。这样做可以消除所有代码(按钮点击处理除外)并在视图(按钮)和视图模型(集合)之间保持关注点的分离如果你在for迭代中放置断点,你的临界计数是否高于t1?同样,如果你在for迭代后放置断点,如果你检查CriticalPanel。Children,你是否有多个孩子?@Oliver现在,我知道我只有一个孩子,所以代码可以工作。我的问题是,如果有多个“临界”,然后我的代码将尝试创建多个具有相同名称的按钮,这将抛出一个错误。然后,如果没有必要,请不要给按钮命名,或者给它命名为:“buttonName”+i,这样您将拥有buttonName1、buttonName2等,并且您的名称将保持唯一
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<GridView ItemsSource="{Binding Things}">
<GridView.ItemTemplate>
<DataTemplate>
<Button Width="100" Height="100" Background="Red" Content="{Binding Name}" Click="CriticalClick" DataContext="{Binding}"></Button>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</Grid>
public class ThingViewModel
{
public ObservableCollection<Thing> Things { get; set; }
public ThingViewModel()
{
var allThings = new List<Thing>();
for (int i = 0; i < 30; i++)
{
if (i % 2 == 0)
allThings.Add(new Thing { Name = "Critical" });
else
allThings.Add(new Thing { Name = "`NonCritical" });
}
this.Things = new ObservableCollection<Thing>(allThings.Where(x => x.Name == "Critical"));
}
}
public class Thing
{
public string Name { get; set; }
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
this.DataContext = new ThingViewModel();
}
private void CriticalClick(object sender, RoutedEventArgs e)
{
var tappedThing = (Thing) ((Button) sender).DataContext;
((ThingViewModel) this.DataContext).Things.Remove(tappedThing);
}