【问题标题】:Unable binding from class on C#无法从 C# 上的类绑定
【发布时间】:2014-08-05 21:59:54
【问题描述】:

这是类的代码:

  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;


    }

【问题讨论】:

  • 这里没有看到任何绑定代码
  • 数据模板>
  • Lisbox name="lstmenu" 代码:lstmenu public MainPage() { this.InitializeComponent(); //获取菜单列表 menu_list = new List(); //Load_Menu(); lst_menu.ItemsSource = 菜单列表; }
  • 您似乎没有将正确的 List 设置为您的 ItemSource,在 Load_Menu 中,您添加到名为“text”的集合中,并在 Main() 中应用了一些名为“menu_list”的集合,顺便说一句,我对你的命名决定表扬了吗?

标签: wpf windows-phone-8.1


【解决方案1】:

这里有几件事...

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

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

然后是呈现这些的模板。

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

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

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

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

编辑: 根据您的完整代码清单,使用后面的代码。您将 lst_menu.ItemsSource 设置为空列表。您的 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;

我希望这会有所帮助。

【讨论】:

  • 我有答案@rohit vats 在你的线上。因为堆栈..不要上传更多代码。
  • 对不起 - 这根本没有意义。按照我建议的指示进行操作,如果对您有帮助,请将其标记为答案。如果没有,请尝试编辑您的问题以包含格式更好的代码。这样我们就可以找出您遇到的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
  • 2014-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多