代码之家  ›  专栏  ›  技术社区  ›  Ben McCormack

分组在一起的两个可枚举的数据模板

  •  3
  • Ben McCormack  · 技术社区  · 14 年前

    public class TestResults
    {
        public string TestGroup {get; set; }
        public string TestName {get; set; }
        public bool TestPassed {get; set; }
    }
    
    public class TestSummary
    {
        public string TestGroup {get; set; }
        public string SummaryText {get; set; }
    }
    

    我得到的一些测试数据可能是这样的:

    TestResults
    TestGroup       TestName        TestPassed
    ==========================================
    Item1           HasPrice        True
    Item1           HasDiscount     True
    Item2           HasPrice        True
    Item2           HasDiscount     False
    
    TestSummary
    TestGroup    SummaryText
    =================================================
    Item1        SKU: 234 Price: 13.40 Discount: 1.34
    Item2        SKU: 345 Pirce: 15.70
    

    如果我有一个 IEnumerable<TestResults> 以及 IEnumerable<TestSummary> ,我希望能够将它们组合在一起 TestGroup 并像这样显示他们的信息:

    ______________________________________________________________________
    | Item1    _________________________  _______________________________ |
    |          | Grid of TestResults   | | SummaryText for Item1        | |
    |          |_______________________| |______________________________| |
    |_____________________________________________________________________|
    ______________________________________________________________________
    | Item2    _________________________  _______________________________ |
    |          | Grid of TestResults   | | SummaryText for Item2        | |
    |          |_______________________| |______________________________| |
    |_____________________________________________________________________|
    

    我有两个问题要问:

    1. IEnumerable 并将它们组合在一起,以便数据模板可以使用它们?
    1 回复  |  直到 14 年前
        1
  •  4
  •   Ben McCormack    14 年前

    我认为您需要创建一个新的类ItemViewModel,它将包含相应的TestResults和SummaryText作为您可以绑定到的属性。然后你就可以创建一个ItemViewModels的IEnumerable并绑定你的ListView(或者你想要的任何东西)。我也建议 Grid of TestResults

    希望这有帮助!简要描述-如果我的解释不够清楚,请留言。

    升级版:

    public class ItemViewModel
    {
        public IEnumerable<string> TestResults { get; set; }
        public string SummaryText { get; set; }
    }
    
    ...
    
    var viewModels = testResults.Select(tr => 
        new ItemViewModel() { 
          TestResults = testResults.Where(t => t.TestGroup == tr.TestGroup)
                                   .Select(t => t.TestName + " " + t.TestPassed),
          SummaryText = testSummaries.First(ts => ts.TestGroup == tr.TestGroup) 
        });
    

    升级版2:

    这个XAML应该可以做到这一点:

    <!-- In your resources -->
    <DataTemplate x:Key="ItemViewModelTemplate">
        <StackPanel Orientation="Horizontal">
            <ListView ItemsSource={Binding TestResults} />
            <TextBlock Text={Binding SummaryText} />
        </StackPanel>
    </DataTemplate>
    
    ...
    
    <!-- In your main xaml file -->
    <!-- Let's assume that your main VM contains property ViewModels 
         that is filled like described above -->
    <ListView ItemsSource={Binding ViewModels} 
              ItemTemplate="{StaticResource ItemViewModelTemplate}" />