C#上的类无法绑定

时间:2014-08-05 07:21:14

标签: wpf windows-phone-8.1

以下是课程代码:

  public class listboxitem
    {
        public string textmenu { get; set; }
        public string logomenu { get; set; }
    }

但是当我将它绑定在文本框上时,它没有显示......

我有这些数组:

 private string[] Logo_menu_array = { "/Assets/star-6-48.ico", "/Assets/note-48.ico", "/Assets/note-48.ico", "medal-48.ico", "joystick-48.ico" };

 private string[] Text_menu_array={"Phổ biến trên YouTuBe","Âm nhạc","Thể thao","Trò chơi"};  

 //load menu
    public void Load_Menu()
    {
        List<listboxitem> text = new List<listboxitem>();
        listboxitem items=new listboxitem();
        for(int i=0;i<Text_menu_array.Length&& i<Logo_menu_array.Length;i++)
        {
            items.textmenu=i.ToString();
        }
        for(int j=0;j<Logo_menu_array.Length;j++)
        {
            items.logomenu = j.ToString();
        }
        text.Add(items);
    }

这个网站没有同意显示更多代码。我很难问这些问题。 我添加了代码:

 <ListBox Name="lst_menu" Foreground="Red">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <Image Source="{Binding logomenu}"></Image>
                                <TextBlock Text="{Binding textmenu}"></TextBlock>
                            </StackPanel>

                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

在这里加载:

public MainPage()
    {
        this.InitializeComponent();
        //get menu
       List<listboxitem> menu_list = new List<listboxitem>();
       Load_Menu();
       lst_menu.ItemsSource = menu_list;


    }

1 个答案:

答案 0 :(得分:2)

这里有一些事情......

首先,我们需要查看XAML以了解如何在UI中绑定它。我假设你有类似的东西:

<ListBox ItemSource="{Binding Items}"/>

然后是一个展示这些的模板。

在您的代码中,您有一个名为text的List对象,该对象仅存在于您的方法中。您需要将此值分配给视图模型中可绑定的属性 - 基于以上内容:

public List<ListItem> Items {get;set;}

此属性应触发INotifyPropertyChanged中定义的PropertyChanged,以便在您的类上实现。 Implementing INotifyPropertyChanged

这将为您提供基础知识。如果要动态控制此集合 - 即在运行时更改项目 - 则应调查ObservableCollection。

修改 根据您的完整代码列表,使用后面的代码。您正在将lst_menu.ItemsSource设置为空List。你的Load_Menu()构建了一个集合,但没有返回它。

public List<listboxitem> Load_Menu()
{
    List<listboxitem> text = new List<listboxitem>();
    listboxitem items=new listboxitem();
    for(int i=0;i<Text_menu_array.Length&& i<Logo_menu_array.Length;i++)
    {
        items.textmenu=i.ToString();
    }
    for(int j=0;j<Logo_menu_array.Length;j++)
    {
        items.logomenu = j.ToString();
    }
    text.Add(items);
    return text;
    // Note you will only ever return one item here - check the logic
}

然后在你的构造函数中:

   List<listboxitem> menu_list = Load_Menu();
   lst_menu.ItemsSource = menu_list;

假设您希望使用数组来构建集合,请尝试使用以下内容进行构建菜单:

List<listboxitem> text = new List<listboxitem>();
for(int i =0; i< Math.Min(Logo_menu_array.Length, Text_menu_array.Length, i++)
{
    var l = new listboxitem();
    l.logomenu = Logo_menu_array[i];
    l.textmenu = Logo_menu_array[i];
}
return text;

我希望这会有所帮助。