0

ここに私のXAMLがあります

 <ListView x:Name="missingVariablesListView" ScrollViewer.CanContentScroll="True" HorizontalAlignment="Left" Height="320" Margin="81,28,0,0" VerticalAlignment="Top" Width="641" ItemsSource="{Binding}">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Vertical">
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="ComponentID: " FontWeight="Bold" Foreground="Brown" />
                                <TextBlock Text="{Binding Name}"/>
                            </StackPanel>
                            <ItemsControl ItemsSource="{Binding Parameters}">
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <StackPanel>
                                            <StackPanel Orientation="Horizontal">
                                                <TextBlock Text="Variable Name: " Foreground="Green"/>
                                                <TextBlock Text="{Binding Name}"/>
                                                <TextBlock Text="   "/>                                           
                                                <TextBlock Text="Variable Value: " Foreground="Blue"/>
                                                <TextBlock Text="{Binding Value}"/>
                                            </StackPanel>
                                        </StackPanel>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                                <ItemsControl.ItemContainerStyle>
                                    <Style >
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding IsMissing}" Value="false">
                                                <Setter Property="UIElement.Visibility" Value="Collapsed"/>                                                    
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </ItemsControl.ItemContainerStyle>
                            </ItemsControl>                           
                                <TextBlock Text="-----------------------------------------------------------------"/>
                        </StackPanel>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

これがコードビハインドです

  this.missingVariablesListView.DataContext = //Code to fill in the list View

関連するクラス

public class Component
  {
  private ObservableCollection<ComponentParameter> parameters = new ObservableCollection<ComponentParameter>();
  public string Name
  {
    get;
    set;
  }

  public ObservableCollection<ComponentParameter> Parameters
  {
    get{return parameters;}
    set{parameters = value;}
   }
}



 public class ComponentParameter
 {
   public string Name
   {
    get;set;
   }

    public string Value
   {
    get;set;
   }

   public bool HasErrors
   {
    get;
    set;
   }

   public bool IsMissing
   {
    get;set;
   }

サンプル出力(現時点)

ComponentID: Component1
--------------------------

ComponentID: Component2
VariableName:Var1 Variable Value:Val1
VariableName:Var2 Variable Value:Val2
-----------------------

ComponentID: Component3
-----------------------

ComponentID: Component4
-----------------------

私がやりたいことは、ブール値の IsMissing が itemsControl 内の内部要素に対して true であるときはいつでも、StackPanel 内の ComponentID および Name プロパティ (水平としての向きを持つ) がウィンドウに表示されないようにすることです。子要素。基本的に、isMissing 変数が true に設定されている特定の ComponentID の説明全体を除外する方法を見つけようとしています。これに関する提案はありますか?

4

3 に答える 3

1

クラスにプロパティIsAnyParameterMissingを追加することを検討します。Component

public class Component
{
    private ObservableCollection<ComponentParameter> parameters = new ObservableCollection<ComponentParameter>();
    public string Name
    {
      get;
      set;
    }

    public ObservableCollection<ComponentParameter> Parameters
    {
        get{return parameters;}
        set{parameters = value;}
    }

    public bool IsAnyParameterMissing
    {
        get { return this.Parameters.Any(param => param.IsMissing); }
    }
}

次に、可視性をこのプロパティにバインドします。

<StackPanel Orientation="Horizontal" Visibility="{Binding IsAnyParameterMissing, Converter={BooleanToVisibilityConverter}}">
    <TextBlock Text="ComponentID: " FontWeight="Bold" Foreground="Brown" />
    <TextBlock Text="{Binding Name}"/>
</StackPanel>

これは、コレクション内のStackPanelいずれかのプロパティが と等しい場合にのみ表示されます。いずれかのアイテムのプロパティが変更された場合、これは可視性を変更しないことに注意してください! これには追加の作業が必要です。ParameterIsMissingtrueIsMissing

編集:{BooleanToVisibilityConverter}利用可能なコンバーターによっては、調整が必要になる場合があることに注意してください。ただし、単純な作業のはずです。

于 2013-10-21T12:09:15.480 に答える