簡體   English   中英

無法將 ListBox 綁定到 IEnumerable<object><div id="text_translate"><p> 這是我第一次使用 List</p><p> 這是我的代碼(為簡化起見,刪除了所有不需要的行)</p><p> 第一類</p><pre>public class RInfo { public int RCode { get; set; } public int ACode { get; set; } public int DCode { get; set; } public string RNo { get; set; } //public DateTime EDate { get; set; } //public DateTime? VDate { get; set; } }</pre><p> Class 2</p><pre> public class DInfo { public int DCode { get; set; } public string DName { get; set; } public bool DCExpires { get; set; } }</pre><p> Class 加入以上兩個類后我會得到</p><pre>public class RInfo_Details { public int RCode { get; set; } public int ACode { get; set; } public int DCode { get; set; } public string DCName { get; set; } public string DName { get; set; } public string RNo { get; set; } //public DateTime EDate { get; set; } //public DateTime? VDate { get; set; } }</pre><p> 這是我的 class 這用於檢索數據和綁定 XAML</p><pre> public class AppData: INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected void RaisePropertyChanged(string propertyName) =&gt; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); private AppData() { } private static AppData instance = null; public static AppData Instance { get { if (instance == null) instance = new AppData(); return instance; } } AInfo _SelAInfo; public AInfo SelAInfo { get =&gt; _SelAInfo; set { _SelAInfo = value; RaisePropertyChanged(nameof(SelAInfo)); RaisePropertyChanged(nameof(RInfo_List)); RaisePropertyChanged(nameof(RInfoDetailedList)); } } List&lt;DInfo&gt; _DInfo; public List&lt;DInfo&gt; DInfo { get =&gt; _DInfo; set { _DInfo = value; RaisePropertyChanged(nameof(DInfo)); } } List&lt;RInfo&gt; _RInfo; public List&lt;RInfo&gt; RInfo { get =&gt; _RInfo; set { _RInfo = value; RaisePropertyChanged(nameof(RInfo)); RaisePropertyChanged(nameof(RInfoDetailedList)); } } public IEnumerable&lt;RInfo_Details&gt; RInfoDetailedList { get { IEnumerable&lt;RInfo_Details&gt; newlist = (from r in RInfo join d in DInfo on r.DCode equals d.DCode select new { r.RCode, r.ACode, r.DCode, d.DName, d.DCExpires, r.RNo, }).ToList() as IEnumerable&lt;RInfo_Details&gt;; return newlist as IEnumerable&lt;RInfo_Details&gt;; } } public void iniTestData() { this.DInfo = new List&lt;DInfo&gt;() { new DInfo{DCode=1, DCExpires=false, DName="PAN" }, new DInfo{DCode=2, DCExpires=true, DName="FSSAI" }, new DInfo{DCode=3, DCExpires=false, DName="AANDAHR" } }; this.RInfo = new List&lt;RInfo&gt;() { new RInfo{RCode=1, ACode=1, DCode=1, RNo="PAN NO ACode 1" }, new RInfo{RCode=2, ACode=2, DCode=1, RNo="PAN NO ACode 2" }, new RInfo{RCode=3, ACode=5, DCode=3, RNo="AADHAR ACode 5" }, new RInfo{RCode=4, ACode=4, DCode=1, RNo="PAN NO ACode 4" } }; } }</pre><p> 這是 XAML 中綁定 AppData.RInfoDetailedList 的代碼</p><pre> &lt;ListView ItemsSource="{Binding Source={x:Static local:AppData.Instance}, Path=RInfoDetailedList}"&gt; &lt;ListView.ItemTemplate&gt; &lt;DataTemplate&gt; &lt;Grid&gt; &lt;Grid.ColumnDefinitions&gt; &lt;ColumnDefinition/&gt; &lt;ColumnDefinition/&gt; &lt;ColumnDefinition/&gt; &lt;/Grid.ColumnDefinitions&gt; &lt;Label Grid.Column="0" Content="{Binding RNo}"/&gt; &lt;Label Grid.Column="1" Content="{Binding DName}"/&gt; &lt;Label Grid.Column="2" Content="{Binding DCExpires }"/&gt; &lt;/Grid&gt; &lt;/DataTemplate&gt; &lt;/ListView.ItemTemplate&gt; &lt;/ListView&gt;</pre><p> RInfo &amp; DInfo 中的數據綁定成功。 但從 RInfoDetailedList 不綁定。 我錯過了什么</p></div></object>

[英]Unable to Bind ListBox to IEnumerable<object>

這是我第一次使用 List

這是我的代碼(為簡化起見,刪除了所有不需要的行)

第一類

public class RInfo 
{
    public int RCode { get; set; }
    public int ACode { get; set; }
    public int DCode { get; set; }
    public string RNo { get; set; }
    //public DateTime EDate { get; set; }
    //public DateTime? VDate { get; set; }
}

Class 2

public class DInfo 
{
    public int DCode { get; set; }
    public string DName { get; set; }
    public bool DCExpires { get; set; }
}

Class 加入以上兩個類后我會得到

public class RInfo_Details
{
    public int RCode { get; set; }
    public int ACode { get; set; }
    public int DCode { get; set; }
    public string DCName { get; set; }
    public string DName { get; set; }
    public string RNo { get; set; }
    //public DateTime EDate { get; set; }
    //public DateTime? VDate { get; set; }
}

這是我的 class 這用於檢索數據和綁定 XAML

public class AppData : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected void RaisePropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

    private AppData() { }

    private static AppData instance = null;

    public static AppData Instance
    {
        get
        {
            if (instance == null) instance = new AppData();
            return instance;
        }
    }

    AInfo _SelAInfo;
    public AInfo SelAInfo
    {
        get => _SelAInfo; set
        {
            _SelAInfo = value; RaisePropertyChanged(nameof(SelAInfo));
            RaisePropertyChanged(nameof(RInfo_List));
            RaisePropertyChanged(nameof(RInfoDetailedList));
        }
    }

    List<DInfo> _DInfo;
    public List<DInfo> DInfo { get => _DInfo; set { _DInfo = value; RaisePropertyChanged(nameof(DInfo)); } }

    List<RInfo> _RInfo;
    public List<RInfo> RInfo { get => _RInfo; set { _RInfo = value; RaisePropertyChanged(nameof(RInfo)); RaisePropertyChanged(nameof(RInfoDetailedList)); } }

    public IEnumerable<RInfo_Details> RInfoDetailedList
    {
        get
        {
            IEnumerable<RInfo_Details> newlist = (from r in RInfo
                                                  join d in DInfo
                                                  on r.DCode equals d.DCode
                                                  select new
                                                  {
                                                      r.RCode,
                                                      r.ACode,
                                                      r.DCode,
                                                      d.DName,
                                                      d.DCExpires,
                                                      r.RNo,
                                                  }).ToList() as IEnumerable<RInfo_Details>;

            return newlist as IEnumerable<RInfo_Details>;
        }
    }

    public void iniTestData()
    {
        this.DInfo = new List<DInfo>()
        {
            new DInfo{DCode=1, DCExpires=false, DName="PAN" },
            new DInfo{DCode=2, DCExpires=true, DName="FSSAI" },
            new DInfo{DCode=3, DCExpires=false, DName="AANDAHR" }
        };

        this.RInfo = new List<RInfo>()
        {
            new RInfo{RCode=1, ACode=1, DCode=1, RNo="PAN NO ACode 1" },
            new RInfo{RCode=2, ACode=2, DCode=1, RNo="PAN NO ACode 2" },
            new RInfo{RCode=3, ACode=5, DCode=3, RNo="AADHAR ACode 5" },
            new RInfo{RCode=4, ACode=4, DCode=1, RNo="PAN NO ACode 4" }
        };
    }
}

這是 XAML 中綁定 AppData.RInfoDetailedList 的代碼

        <ListView ItemsSource="{Binding Source={x:Static local:AppData.Instance}, Path=RInfoDetailedList}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
                    <Label Grid.Column="0" Content="{Binding RNo}"/>
                    <Label Grid.Column="1" Content="{Binding DName}"/>
                    <Label Grid.Column="2" Content="{Binding DCExpires }"/>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

RInfo & DInfo 中的數據綁定成功。 但從 RInfoDetailedList 不綁定。 我錯過了什么

這是因為RInfoDetailedList由於錯誤的演員陣容而返回 null !

您可以像這樣在 select 語句中創建RInfo_Details object

public IEnumerable<RInfo_Details> RInfoDetailedList
{
    get
    {
        if (RInfo == null || DInfo == null) return null;   
        var newList = from r in RInfo
            join d in DInfo
                on r.DCode equals d.DCode
            select new RInfo_Details {
                RCode = r.RCode,
                ACode = r.ACode,
                DCode = r.DCode,
                DName = d.DName,
                RNo = r.RNo,
            };

        return newList;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM