簡體   English   中英

Silverlight-我的方案所需的動態屬性數量?

[英]Silverlight - dynamic number of properties necessary for my scenario?

我手頭有一個應用程序,可以幫助您弄清楚如何使用多種技術來清潔受污染的地點(多種污染物)。 自然地,我將擁有一個技術類和一個污染物類。

Class Pollutant
{
string name;
double baselineAmount;
double reduction goal
...
}

List<Pollutant> pollutantsList=new List<Pollutant>;

Class Technique
{
string name;
List <PerPollutantProperties> PollutantRelatedProperties=new List<PerPollutantProperties>();
...
}

Class PerPollutantProperties
{
string name;
double CurrentLoad=0;
double ReducedLoad=0;
...
}

List<Technique> techniquesList= new List<Technique>();

main()
{
Pollutant pollutant1 = new Pollutant();
Pollutant pollutant2 = new Pollutant();

...
pollutantsList.Add(pollutant1);
pollutantsList.Add(pollutant2);

Technique tec1=new Technique();
Technique tec2=new Technique();
tec1.name="tec1";
tec2.name="tec2";

PerPollutantProperties PPP= new PerPollutantProperties();    
PPP.name="Nitrogen";
tec1.PollutantRelatedProperties.Add(PPP);
tec2.PollutantRelatedProperties.Add(PPP);


PPP= new PerPollutantProperties();
PPP.name="Phorsphorus";
tec1.PollutantRelatedProperties.Add(PPP);
tec2.PollutantRelatedProperties.Add(PPP);

PPP= new PerPollutantProperties();
PPP.name="Sediment";
tec1.PollutantRelatedProperties.Add(PPP);
tec2.PollutantRelatedProperties.Add(PPP);

techniquesList.Add(tec1);
techniquesList.Add(tec2);
...

dataGridTechniques.ItemSource = techniquesList;
}

XAML:

         <sdk:DataGrid AutoGenerateColumns="False" Height="Auto" HorizontalAlignment="Left" Margin="12,483,0,0" Name="dataGridTechniques" 
                              VerticalAlignment="Top" Width="Auto" RowHeight="55">
                    <sdk:DataGrid.Columns>
                        <sdk:DataGridTemplateColumn Header="Current Load (lbs/yr)" Width="Auto">
                            <sdk:DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <toolkit:LayoutTransformer RenderTransformOrigin="0,0" >
                                        <toolkit:LayoutTransformer.LayoutTransform>
                                            <RotateTransform Angle="-90"/>
                                        </toolkit:LayoutTransformer.LayoutTransform>
                                        <sdk:DataGrid ItemsSource="{Binding PollutantRelatedProperties}"  
                                                      RowHeight="70" HeadersVisibility="None" AutoGenerateColumns="False">
                                            <sdk:DataGrid.Columns>
                                                <sdk:DataGridTemplateColumn Width="25" Header="currentLoad">
                                                    <sdk:DataGridTemplateColumn.CellTemplate>
                                                        <DataTemplate>
                                                            <toolkit:LayoutTransformer>
                                                                <toolkit:LayoutTransformer.LayoutTransform>
                                                                    <RotateTransform Angle="90"/>
                                                                </toolkit:LayoutTransformer.LayoutTransform>
                                                                <TextBlock Text="{Binding CurrentLoad,Converter={StaticResource MyDoubleToStringRoundConverter}}" />
                                                            </toolkit:LayoutTransformer>
                                                        </DataTemplate>
                                                    </sdk:DataGridTemplateColumn.CellTemplate>
                                                </sdk:DataGridTemplateColumn>
                                                <sdk:DataGridTemplateColumn Width="25" Header="Pollutant">
                                                    <sdk:DataGridTemplateColumn.CellTemplate>
                                                        <DataTemplate>
                                                            <toolkit:LayoutTransformer>
                                                                <toolkit:LayoutTransformer.LayoutTransform>
                                                                    <RotateTransform Angle="90"/>
                                                                </toolkit:LayoutTransformer.LayoutTransform>
                                                                <TextBlock Text="{Binding PollutantName}" />
                                                            </toolkit:LayoutTransformer>
                                                        </DataTemplate>
                                                    </sdk:DataGridTemplateColumn.CellTemplate>
                                                </sdk:DataGridTemplateColumn>
                                            </sdk:DataGrid.Columns>
                                        </sdk:DataGrid>
                                    </toolkit:LayoutTransformer>
                                </DataTemplate>
                            </sdk:DataGridTemplateColumn.CellTemplate>
                        </sdk:DataGridTemplateColumn>

                        <sdk:DataGridTemplateColumn Header="Reduced Load (lbs/yr)" Width="Auto">
                            <sdk:DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <toolkit:LayoutTransformer RenderTransformOrigin="0,0" >
                                        <toolkit:LayoutTransformer.LayoutTransform>
                                            <RotateTransform Angle="-90"/>
                                        </toolkit:LayoutTransformer.LayoutTransform>
                                        <sdk:DataGrid ItemsSource="{Binding PollutantRelatedProperties}" 
                                                      RowHeight="70" HeadersVisibility="None" AutoGenerateColumns="False">
                                            <sdk:DataGrid.Columns>
                                                <sdk:DataGridTemplateColumn Width="25" Header="reducedLoad">
                                                    <sdk:DataGridTemplateColumn.CellTemplate>
                                                        <DataTemplate>
                                                            <toolkit:LayoutTransformer>
                                                                <toolkit:LayoutTransformer.LayoutTransform>
                                                                    <RotateTransform Angle="90"/>
                                                                </toolkit:LayoutTransformer.LayoutTransform>
                                                                <TextBlock Text="{Binding ReducedLoad,Converter={StaticResource MyDoubleToStringRoundConverter}}" />
                                                            </toolkit:LayoutTransformer>
                                                        </DataTemplate>
                                                    </sdk:DataGridTemplateColumn.CellTemplate>
                                                </sdk:DataGridTemplateColumn>
                                                <sdk:DataGridTemplateColumn Width="25" Header="Pollutant">
                                                    <sdk:DataGridTemplateColumn.CellTemplate>
                                                        <DataTemplate>
                                                            <toolkit:LayoutTransformer>
                                                                <toolkit:LayoutTransformer.LayoutTransform>
                                                                    <RotateTransform Angle="90"/>
                                                                </toolkit:LayoutTransformer.LayoutTransform>
                                                                <TextBlock Text="{Binding PollutantName}" />
                                                            </toolkit:LayoutTransformer>
                                                        </DataTemplate>
                                                    </sdk:DataGridTemplateColumn.CellTemplate>
                                                </sdk:DataGridTemplateColumn>
                                            </sdk:DataGrid.Columns>
                                        </sdk:DataGrid>
                                    </toolkit:LayoutTransformer>
                                </DataTemplate>
                            </sdk:DataGridTemplateColumn.CellTemplate>
                        </sdk:DataGridTemplateColumn>
                    </sdk:DataGrid.Columns>
                </sdk:DataGrid>

棘手的部分是應用程序應允許用戶添加/刪除污染物/技術以供考慮,並且每種技術對每種污染物的還原效率都不同。 這意味着對於每種添加的污染物,需要在“技術”類別中添加一種更有效的方法。 我應該如何構造Technique類以適應這種情況? 我想將TechniquesList綁定到諸如數據網格之類的東西,用戶可以在其中輸入自定義信息,例如有效的回收。

編輯:決定在Technique類中使用一個List(實際上是ObservableCollection,以及其他建議和RKaufman的建議)屬性,並嵌套Datagrid。 到目前為止,我遇到了兩個問題。

問題1.除了我在XAML中在嵌套DG中設置的列之外,數據源的每個屬性也顯示為一列。 最初,我不得不在后面的代碼中將其可見性設置為“ Collapsed”,但是在編輯本文時,我發現可以將AutoGenerateColumns設置為False即可擺脫多余的列。

問題2。每個嵌套Datagrid的第0行和第0列中的TextBlock元素具有圍繞它們的焦點重新排列。 我不知道為什么以及如何在可能的情況下將其關閉。 即使我單擊UI的其他區域,它們也不會消失。

屏幕截圖(對不起,目前還不足以在帖子中嵌入圖像): http : //xyk.iwebs.ws/nestedDG_textBlock_highlight.JPG

如果我理解正確的話,您就需要能夠添加或去除技術中的污染物。 如果這是正確的,那么每種技術都需要收集污染物。 為了向用戶顯示此信息,帶有行詳細信息模板的數據網格將解決該問題。 至於將污染物添加到技術中,我建議您使用單獨的頁面或子窗口來添加/編輯該技術,並使用幾個列表框來選擇/取消選擇污染物。 我還將使用System.Collections.ObjectModel.ObservableCollection而不是List,因為它實現了INotifyCollectionChanged,並且在您添加或刪除集合中的項目時會向您的UI發出通知。

如果這不正確,請告訴我或給我更多信息,我會盡力為您提供指導。

暫無
暫無

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

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