2016-09-18 47 views
0

我有一個DataGrid在我的視圖與ItemsSource="{Binding GetValues, Mode=TwoWay}"。在我的ViewModel中: private List getValues = new List();在我的ViewModel中: 如何將LINQ結果綁定到DataGrid,只有一列?

public List<Language> GetValues 
{ 
    get { return getValues; } 
    set { SetField("GetValues", ref getValues, value); } 
} 

在這種情況下,一切都很好:

DatabaseDataContext myDB = new DatabaseDataContext(); 
var query = myDB.Languages.Where(u => u.Valid == true).ToList(); 
GetValues = query; 

但我想在我的DataGrid中只有一列就搞定了,所以嘗試這樣做:

DatabaseDataContext myDB = new DatabaseDataContext(); 
var query = myDB.Languages 
         .Where(u => u.Valid == true) 
         .Select(u => new { Name = u.Title }); 
GetValues = query.ToList(); 

「不能隱轉換類型 'System.Collections.Generic.List <>'至 'System.Collections.Generic.Lis t'「

有沒有解決這個問題的好方法?

回答

0

問題query returns a anonymous object,你試圖將這個匿名對象列表分配給語言類型列表。

解決方案更改您的Linq query to select a object of type Language而不是匿名對象。

這必須幫助

var query = myDB.Languages 
         .Where(u => u.Valid == true) 
         .Select(u => new Language { Title = u.Title }); 

然後當你在上面做一個.ToList()結果和GetValues數據類型將匹配。

+0

你是對的,但另一種方式,他可以簡單地改變的GetValues是'名單'只是'。選擇(u => u.Title);'。如果他肯定想要使用'Language'類型的列表,它將不起作用。 –

+0

@KeyurPATEL是的,但我認爲他希望使用'語言'本身而不是'字符串',因爲他提到他想填充DataGrid並只有一列,這意味着還會有其他列也使用默認值值/ null。 –

0

由於GetValues的類型是List<Language>,但您嘗試將其設置爲動態創建的匿名類型,您會收到錯誤消息。爲了解決這個問題,你應該創建一個代表你所需數據的新類。

public class LanguageTitle 
{ 
    public string Name { get; set; } 
    // Other needed properties 
} 

然後添加屬性,以您的視圖模型:

public List<LanguageTitle> LanguageTitles 
{ 
    get { return languageTitles; } 
    set { SetField("GetLanguageTitles", ref languageTitles, value); } 
} 

在您的查詢選擇LanguageTitle

DatabaseDataContext myDB = new DatabaseDataContext(); 
var query = myDB.Languages 
         .Where(u => u.Valid == true) 
         .Select(u => new LanguageTitle { Name = u.Title }); 
LanguageTitles = query.ToList(); 

和綁定你的DataGrid這個屬性:

ItemsSource="{Binding LanguageTitles, Mode=TwoWay}" 
0

爲什麼會有一個對象具有:

public List<Language> GetValues 
{ 
    get { return getValues; } 
    set { SetField("GetValues", ref getValues, value); } 
} 

但您不希望從該對象中填充所有屬性。這是一個糟糕的做法,所以重複使用對象,因爲它們幾乎是相似的。 你可能想改變你的財產的GetValues到

public List<string> GetValues {get;set;} 

然後在你的LINQ查詢,你可以使用:

GetValues = myDB.Languages 
        .Where(u => u.Valid == true) 
        .Select(u => u.Title) 
        .ToList(); 
相關問題