0

ここで質問を始めましたが、簡潔ではないようです。

オブジェクト (ジョブ) にバインドされた DataGrid があります。

private String resultImagePath;  // The Image to be shown in the DataGrid showing the status
private String name;  // The Job container's name
private String jobDescription; // A Sub Task
// AND the corresponding Public Properties implementing iPropertyChange  

public int Sequence; // For sorting purposses
// The paths to the icons 
public String ErrorPath = "pack://application:,,,/Resources/Flag_Red.ico";
public String SuccessPath = "pack://application:,,,/Resources/Flag_Green.ico";
public String WarningPath = "pack://application:,,,/Resources/Flag_Yellow.ico";
public String RunningPath = "pack://application:,,,/Resources/Flag_Running.ico";
public String HistoryPath = "pack://application:,,,/Resources/History.ico.ico";

Job オブジェクトが作成されると、ResultImagePath が RunningPath に設定されます。ジョブは以下を使用してグループ化されます。

collection = new ListCollectionView(JobData);
collection.GroupDescriptions.Add(new PropertyGroupDescription("Name"));
JobHistory.ItemsSource = collection;

ジョブデータ:

ObservableCollection<Job> JobData = new ObservableCollection<Job>();

JobHistory は、スタイルとテンプレートを使用した DataGrid です。

<UserControl.Resources>
    <Image x:Key="image" Source="pack://application:,,,/Resources/History.ico" Height="18" Width="18" Margin="2,0"/>
    <Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type GroupItem}">
                    <Expander Name="expander" IsExpanded="True" >
                        <Expander.Header>
                            <StackPanel Orientation="Horizontal">
                                <ContentControl Content="{StaticResource ResourceKey=image}"/>
                                <TextBlock Text="{Binding Name}" Padding="2,0"/>
                            </StackPanel>
                        </Expander.Header>
                        <ItemsPresenter />
                    </Expander>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</UserControl.Resources>

<DataGrid Name="JobHistory" CanUserAddRows="False" AutoGenerateColumns="False" ColumnWidth="*"
          CanUserDeleteRows="False" ItemsSource="{Binding}" Grid.Row="2" 
          Grid.ColumnSpan="5" CanUserResizeRows="False" 
          Grid.RowSpan="2" IsTextSearchEnabled="True" VerticalScrollBarVisibility="Visible"  >
    <DataGrid.GroupStyle>
        <GroupStyle ContainerStyle="{StaticResource GroupHeaderStyle}">
            <GroupStyle.Panel>
                <ItemsPanelTemplate>
                    <DataGridRowsPresenter/>
                </ItemsPanelTemplate>
            </GroupStyle.Panel>
        </GroupStyle>
    </DataGrid.GroupStyle>
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Status" Width="Auto" IsReadOnly="True">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Image Source="{Binding ResultImagePath}" Height="18" Width="18"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTextColumn Header="Job description" Binding="{Binding JobDescription}"/>
    </DataGrid.Columns>
</DataGrid>

タスクのステータスが変更されると、イメージは実行中から完了、警告、またはエラーに変更されます。ステータスが異なる多くのジョブとグループが存在する可能性があります。

SomeTask.ResultImagePath = job.SuccessPath;
...
<DataTemplate>
  <Image Source="{Binding ResultImagePath}" Height="18" Width="18"/>
</DataTemplate>

この時点まで、すべてうまくいきます。

これが質問の出番
です。グループ化されているジョブに基づいてグループヘッダーの画像を設定するにはどうすればよいですか? ジョブにエラーまたは警告がある場合は、グループ ヘッダーのイメージをより重大なものに変更する必要があります。ジョブがまだ実行中の場合 (ただし、エラーや警告はありません)、ヘッダーには実行中と表示されます。すべてのジョブが成功すると、成功イメージが表示されます。私の問題はロジックではなく、特定のグループ ヘッダーにアクセスして StackBox 内のイメージを変更する方法です。

わかりやすくするために:

ここに画像の説明を入力

警告画像は、履歴画像を置き換える必要があります。

4

1 に答える 1

0

Job オブジェクトに Image プロパティを追加することになりました。次に、「Loaded」イベントを使用してすべてのグループを検索し、「この」イメージをグループに対応するジョブに追加しました。

于 2013-10-15T18:30:35.050 に答える