开发者

Data template for two enumerables that are grouped together

开发者 https://www.devze.com 2023-01-23 13:44 出处:网络
Let\'s say I have the following two classes: public class TestResults { public string TestGroup {get; set; }

Let's say I have the following two classes:

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; }
}

Some of the test data I have might look like this:

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

If I have an IEnumerable<TestResults> along with an IEnumerable<TestSummary>, I'd like to be able to group them together on TestGroup and display their information somewhat like this:

______________________________________________________________________
| Item1    _________________________  _______________________________ |
|          | Grid of TestResults   | | SummaryText for Item1        | |
|          |_______________________| |______________________________| |
|_____________________________________________________________________|
_开发者_运维知识库_____________________________________________________________________
| Item2    _________________________  _______________________________ |
|          | Grid of TestResults   | | SummaryText for Item2        | |
|          |_______________________| |______________________________| |
|_____________________________________________________________________|

I have 2 questions about how this might be done:

  1. How do I join the two IEnumerables and group them together so that they can be consumed by a datatemplate?
  2. What might my data template look like to be able to display the grouped data?


I think that you need to create a new class ItemViewModel which will contain corresponding TestResults and SummaryText as properties that you can bind to. Than you will be able to create an IEnumerable of ItemViewModels and bind your ListView (or whatever you want to it). I also suggest that Grid of TestResults is better to replace with ListView bound to TestResults property of a view model.

Hope this helps! Briefly described - please leave a comment if my explanation is not clear enough.

UPD:

This code should fill the IEnumerable of view models:

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) 
    });

UPD2:

This XAML should do the trick:

<!-- 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}" />
0

精彩评论

暂无评论...
验证码 换一张
取 消