【问题标题】:Setting selected item on Listbox in Silverlight - Windows Phone 7在 Silverlight 中的 Listbox 上设置所选项目 - Windows Phone 7
【发布时间】:2010-12-22 18:49:18
【问题描述】:

我有一个绑定到通用列表的数据绑定列表框,如下所示(Provider 是一个非常简单的类,只包含一个属性(名称)。

ProviderList = new List<Provider>();
//Populate list
Providers.ItemsSource = ProviderList;

我可以毫无问题地保存所选项目,但之后我无法通过代码设置所选项目。我正在尝试这样做:

int x = Providers.Items.IndexOf((Provider)_Settings["provider"]);

但是IndexOf() 总是返回-1。如果我在运行时使用即时窗口检查 Providers.Items[1] 和 _Setting["provider"] ,它们都会返回

{StoreRetrieveData.Provider}
Name: "Greenflag"

我是不是做错了什么(很明显我是)?

【问题讨论】:

    标签: c# silverlight-4.0 windows-phone-7


    【解决方案1】:

    您是否有机会比较具有相同值的两个不同对象?你可以试试下面的代码吗:

    Provider provider = (Provider)_Settings["provider"];
    items.OfType<Provider>().Where(p => p.Name.Equals(provider.Name));
    

    【讨论】:

    • 我不熟悉 LINQ 语法,无法使其正常工作。我将您的代码用作“var test = Providers.Items.OfType().Where(p => p.Name.Equals(provider.Name));”
    • 检查“System.collections....Current”时收到此错误-“System.Collections.Generic.IEnumerable”不包含“System”的定义并且找不到接受“System.Collections.Generic.IEnumerable”类型的第一个参数的扩展方法“System”(您是否缺少 using 指令或程序集引用?)
    • 如果您使用的是 .Net 3.5 或更高版本,请确保您的代码文件顶部有 using System.Linq。如果您不想使用 LINQ,则必须使用循环。
    【解决方案2】:

    用途:

    ListBox.Items
        .OfType<ColumnDescriptor>()
        .FirstOrDefault(c =>
            String.Equals(
                c.Name,
                ((Provider)_Settings["provider"]).Name,
                StringComparison.Ordinal));
    

    【讨论】:

      【解决方案3】:

      您可能必须重载 Provider 类的 Equals 和 == 运算符才能使其正常工作。否则,如果对象是不同的实例,您的比较将失败。见http://msdn.microsoft.com/en-us/library/ms173147(v=vs.80).aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多