2016-11-17 10 views
1

My TreeView-Please Click hereステータスを表示するTreeViewのTreeviewItemを強調表示する方法は?

これは私のツリービューです。ここでは、内部の子ノードのみを実行しています。たとえば、実行中のノードの状態を表示したいとします。ここでは「Primary_details」に3つの子があります。 Tap_Diaryが実行されている場合、ツリー内の緑の色でそのノードを強調表示したい。次に、次のノードを選択する。最初のノードの選択を保持する。これら3つのノードを完了した後、 status.If上での実行は、特定のノードが、あなたが状況を追加することができme.Followingは私のコード

<TreeView x:Name="treeViewSteps" Visibility="Hidden" HorizontalAlignment="Left" Grid.Column="1" 
     Height="230" VerticalAlignment="Top" Width="267" Margin="10,46,0,0" ScrollViewer.HorizontalScrollBarVisibility="Auto" 
       ScrollViewer.VerticalScrollBarVisibility="Auto"> 
     <TreeView.ItemTemplate> 
      <HierarchicalDataTemplate DataType="{x:Type local:WorkFlowScriptIDDataStore}" ItemsSource="{Binding Subcategories}"> 
       <TextBlock Text="{Binding Name}" /> 
      </HierarchicalDataTemplate> 
     </TreeView.ItemTemplate> 
     <TreeView.ItemContainerStyle> 
      <Style TargetType="{x:Type TreeViewItem}"> 
       <Setter Property="IsExpanded" Value="True" /> 
      </Style> 
     </TreeView.ItemContainerStyle> 
     <TreeView.Background> 
      <ImageBrush/> 
     </TreeView.Background> 
    </TreeView>  

コード

List<WorkFlowScriptIDDataStore> lst = new List<WorkFlowScriptIDDataStore>() { WorkFlowScriptIDDataList }; 
      treeViewSteps.ItemsSource = lst; 
public class WorkFlowScriptIDDataStore 
    { 
     public string Id { get; set; } 
     public string Name { get; set; } 
     public string ParentId { get; set; } 
     public int Level { get; set; }            
     public List<WorkFlowScriptIDDataStore> Subcategories { get; set; } 
    } 
+0

あなたに素晴らしい答えを与えるには、あなたがまだ質問していないかどうかを一目でわかると助けになるかもしれません。 「itemxxが実行されている場合」とはどういう意味ですか? – Mat

+0

私はテストステップを実行しています –

答えて

1

です助けてください赤colour.Couldでなければならないことに失敗しましたあなたのアイテムのプロパティ。次に、コード内のアイテムのステータスを変更します。ビューは各項目のステータスに応じて色を更新します。私の例では、これにはDataTriggerを使用しました。また、アイテムクラスにINotifyPropertyChangedインターフェイスを実装する必要があります。私はViewModelBaseクラスでこれをやった。これは非常に基本的なMVVMパターンなので、私はこのクラスを提供しません。

メインウィンドウ

public partial class MainWindow 
{ 
    public MainWindow() 
    { 
     this.InitializeComponent(); 

     List<ItemViewModel> newList = new List<ItemViewModel>(); 


     newList.Add(new ItemViewModel() { Name = "foo", Status = Status.finished}); 
     newList.Add(new ItemViewModel() { Name = "foo1", Status = Status.waiting }); 
     newList.Add(new ItemViewModel() { Name = "foo2", Status = Status.executing }); 


     newList[1].Items.Add(new ItemViewModel() { Name = "subFoo", Status = Status.executing }); 
     newList[1].Items.Add(new ItemViewModel() { Name = "subFoo1", Status = Status.executing }); 

     DataContext = newList; 


    } 
} 

ItemViewModel

public class ItemViewModel :ViewModelBase 
{ 
    private ObservableCollection<ItemViewModel> _subItems = new ObservableCollection<ItemViewModel>(); 
    private string _name; 
    private Status _status; 
    public string Name 
    { 
     get 
     { 
      return _name; 
     } 
     set 
     { 
      _name = value; 
      OnPropertyChanged(); 
     } 
    } 
    public Status Status 
    { 
     get 
     { 
      return _status; 
     } 
     set 
     { 
      _status = value; 
      OnPropertyChanged(); 
     } 
    } 

    public ObservableCollection<ItemViewModel> Items 
    { 
     get 
     { 
      return _subItems; 
     } 
    } 
} 

ステータス列挙

public enum Status 
{ 
    waiting, 
    executing, 
    finished 
} 

XAML:

<TreeView ItemsSource="{Binding}"> 
     <TreeView.ItemTemplate> 
      <HierarchicalDataTemplate DataType="{x:Type local:ItemViewModel}" 
             ItemsSource="{Binding Items}"> 
       <TextBlock Text="{Binding Name}" > 
        <TextBlock.Style> 
         <Style TargetType="TextBlock"> 
          <Setter Property="Background" 
            Value="Red" /> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding Path=Status}" 
              Value="{x:Static local:Status.finished}"> 
            <Setter Property="Background" 
              Value="Lime" /> 
           </DataTrigger> 
           <DataTrigger Binding="{Binding Path=Status}" 
              Value="{x:Static local:Status.waiting}"> 
            <Setter Property="Background" 
              Value="#A9A9A9" /> 
           </DataTrigger> 
           <DataTrigger Binding="{Binding Path=Status}" 
              Value="{x:Static local:Status.executing}"> 
            <Setter Property="Background" 
              Value="#0099CC" /> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </TextBlock.Style></TextBlock> 
      </HierarchicalDataTemplate> 
     </TreeView.ItemTemplate> 
    </TreeView> 

何が欠けていますか?

アイテムの処理方法は指定していません。しかし、ここに例があります:

foreach (var item in items) 
{ 
    item.Status = Status.waiting; 
} 

foreach (var item in items) 
{ 
    item.DoSomeStuff(); 
    item.Status = Status.finished; 
} 
+0

ありがとうございますMat.Itsの作業 –

+1

あなたは答えを受け入れることをお勧めしますか?あるいは私にアップコートを与える;-) – Mat

関連する問題