在我的Windows手机应用程序中,我想动态添加按钮当我点击Add
按钮时,如图所示:
以下是我在Add
按钮上使用的代码。
xaml页面代码
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="24,0,0,0">
<TextBox x:Name="tb_groupname"
Height="90"
Background="White"
Margin="0,0,125,517"
Foreground="Blue" TextChanged="tb_groupname_TextChanged" GotFocus="tb_groupname_GotFocus" LostFocus="tb_groupname_LostFocus"/>
<Button x:Name="btn_groupname"
Content="Add"
Background="AliceBlue"
Foreground="Blue"
FontSize="25"
Width="120"
Height="90"
HorizontalAlignment="Right"
VerticalAlignment="Top" Click="btn_groupname_Click"></Button>
<ListBox x:Name="lb_groupofcontacts" ItemsSource="{Binding}" Margin="0,118,0,0">
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button Content="{Binding Name}" Width="100" Height="100" Click="btn_Click"/>
</StackPanel>
</DataTemplate>
</ListBox>
</Grid>
xaml.cs代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using Microsoft.Phone.UserData;
using System.Windows.Media;
using Microsoft.Phone.Maps.Controls;
using System.Collections.ObjectModel;
namespace GetContacts
{
public partial class createGroups : PhoneApplicationPage
{
string buttonName = "";
public ObservableCollection<Group> groupbtn;
List<Button> buttons = new List<Button>();
public createGroups()
{
InitializeComponent();
}
private void btn_groupname_Click(object sender, RoutedEventArgs e)
{
if (tb_groupname.Text != string.Empty)
{
groupbtn = new ObservableCollection<Group>()
{
new Group {Name = tb_groupname.Text}
};
lb_groupofcontacts.DataContext = groupbtn;
}
}
private void btn_Click(object sender, RoutedEventArgs e)
{
// some code
}
}
}
Group
是我的课程:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using GetContacts.Resources;
using Microsoft.Phone.UserData;
namespace GetContacts
{
class Group
{
public string Name { get; set; }
public Group()
{
}
public Group(Button btn)
{
Name = btn.Name;
}
}
}
但是我在此公开ObservableCollection<Group> groupbtn;
以及此参考groupbtn
Inconsistent accessibility: field type 'System.Collections.ObjectModel.ObservableCollection<GetContacts.Group>' is less accessible than field
请建议我,等待你的回复。 感谢。
答案 0 :(得分:1)
您每次都在创建新列表,因此在给定时间它只有一个您最近添加的按钮。
所以不要在本地定义List<Button> buttons = new List<Button>()
。所以要么使这个集合成员变量
OR 使用适当的MVVM正确执行此操作。 (这仍然不是使用MVVM的正确示例,而是尽可能使其尽可能接近您的解决方案) 我建议你定义下面的属性(实现INotifyPropertyChanged)
public ObservableCollection<string> Buttons{get;set;}
public string ButtonName{get;set;}
并绑定您的文本框并为ListBox定义ItemTemplate,如:
<TextBox x:Name="tb_groupname" Text="{Binding ButtonName}"/>
<ListBox x:Name="lb_groupofcontacts" ItemsSource="{Binding Buttons}" Margin="0,118,0,0">
<ListBox.ItemTemplate>
<DataTemplate>
<Button FontSize="25" Width="120" Height="90" Content="{Binding}"></Button>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
现在只是初始化初始化方法中的按钮集合
public MainWindow()
{
InitializeComponent();
Buttons = ObservableCollection<string>();
DataContext = this;
}
private void btn_groupname_Click(object sender, RoutedEventArgs e)
{
if (ButtonName != string.Empty)
{
Buttons.Add(ButtonName);
ButtonName = string.Empty;
}
}
不一致的可访问性错误:通常会发生这种情况,因为您的字段或类是私有的。您必须将其更改为公开
喜欢public class Group {}