2016-07-13 4 views
2

私は最初のUWPアプリケーションを開発中で、このようなUIを作成したいと考えています。各リストアイテム(プロジェクト)には一連のボタンがあります。特定のリスト項目(プロジェクト)では、これらのボタンのいくつかが何度か無効になります。だから私はこれらのリスト項目(プロジェクト)のボタンの画像を無効にして変更する必要があります。リストビューのアイテム内のUWPボタン

このようなリストビューを使用して実装しようとしました。しかし、私は条件に応じて、これらのボタンのいくつかを有効/無効にする方法がわかりません。

DataContextChangedイベントを追加し、そのボタンにアクセスしようとしました。しかし、私はどのようにそれらのボタンにアクセスすることができますか分からない。

以下のアプローチが正しいか、上記のイメージで達成しようとしていることを行う良い方法があるかどうかを教えてください。

<ListView x:Name="stepsListView" Margin="10,0,0,0" RequestedTheme="Dark" FontSize="24" Background="{StaticResource procedure_app_white}" Foreground="Black" BorderThickness="1.5" BorderBrush="Transparent" ItemsSource="{Binding projectList}" HorizontalAlignment="Left"> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
     </Style> 
    </ListView.ItemContainerStyle> 

    <!-- Item --> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <Border BorderThickness="0,0,0,1" BorderBrush="#c0c0c0"> 
       <Grid Width="auto" HorizontalAlignment="Stretch" DataContextChanged="Grid_DataContextChanged" > 
        <Grid.RowDefinitions> 
         <RowDefinition Height="*"/> 
         <RowDefinition Height="50"/> 
        </Grid.RowDefinitions> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*"/> 
         <ColumnDefinition Width="100"/> 
         <ColumnDefinition Width="100"/> 
         <ColumnDefinition Width="100"/> 
         <ColumnDefinition Width="100"/> 
         <ColumnDefinition Width="100"/> 
         <ColumnDefinition Width="100"/> 
        </Grid.ColumnDefinitions> 
        <TextBlock VerticalAlignment="Center" FontSize="30" Grid.Row="0" Grid.ColumnSpan="7" Text="{Binding projectName}" Foreground="{StaticResource procedure_app_orange_text }" /> 

        <Button x:Name="warningButton" Width="40" Height="40" Grid.Column="1" Grid.Row="1" Tag="{Binding projectId}" Click="warningButtonClick" Foreground="{StaticResource procedure_app_orange_text }"> 
         <Button.Background> 
          <ImageBrush ImageSource="Asset/step_ncwr.png"> 
          </ImageBrush> 
         </Button.Background> 
        </Button> 
        <Button x:Name="commentButton" Width="40" Height="40" Grid.Column="2" Grid.Row="1" Tag="{Binding projectId}" Click="CommentButtonClick" Foreground="{StaticResource procedure_app_orange_text }" IsTapEnabled="True"> 
        <Button.Background> 
         <ImageBrush ImageSource="Asset/step_comment.png"> 
         </ImageBrush> 
        </Button.Background> 
        </Button> 
        <Button x:Name="imageButton" Width="40" Height="40" Grid.Column="3" Grid.Row="1" Tag="{Binding projectId}" Click="ImageButtonClick" Foreground="{StaticResource procedure_app_orange_text }"> 
         <Button.Background> 
          <ImageBrush ImageSource="Asset/step_image.png"> 
          </ImageBrush> 
         </Button.Background> 
        </Button> 
       </Grid> 
      </Border> 
     </DataTemplate> 
    </ListView.ItemTemplate> 

答えて

5

答えが変数にあなたはので、私はそれにいくつかの仮定およびロールを作るつもりで行ってきたどのような構造に依存しています。

私はあなたのViewModelProjectListと呼ばれるObservableCollectionを持っており、このProjectListをごViewModelあなたが

を持つべきで

public class ProjectModel : INotifyPropertyChanged{ 
     private bool _isNcwrEnabled; 
     public bool IsNcwrEnabled{ 
      get{ return _isNcwrEnabled; } 
      set{ _isNcwrEnabled = value; OnPropertyChanged("IsNcwrEnabled"); } 
     } 
     private bool _isCommentEnabled; 
     public bool IsCommentEnabled{ 
      get{ return _isCommentEnabled; } 
      set{ _isCommentEnabled= value; OnPropertyChanged("IsCommentEnabled"); } 
     } 
     private bool _isImageEnabled; 
     public bool IsImageEnabled{ 
      get{ return _isImageEnabled; } 
      set{ _isImageEnabled= value; OnPropertyChanged("IsImageEnabled"); } 
     } 

    public void OnPropertyChanged(String prop) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 

     if (handler != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(prop)); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

ProjectModelさん

ProjectModel.csで構成されていると仮定するつもりです初

ObservableCollection<ProjectModel> ProjectList {get; private set; } 

最後にお客様のView

<Button IsEnabled="{Binding IsNcwrEnabled}" x:Name="warningButton" Width="40" Height="40" Grid.Column="1" 
      Grid.Row="1" Tag="{Binding projectId}" Click="warningButtonClick" 
      Foreground="{StaticResource procedure_app_orange_text }"> 
     <Button.Background> 
      <ImageBrush ImageSource="Asset/step_ncwr.png"/> 
     </Button.Background> 
    </Button> 
    <Button IsEnabled="{Binding IsCommentEnabled}" x:Name="commentButton" Width="40" Height="40" Grid.Column="2" 
      Grid.Row="1" Tag="{Binding projectId}" Click="CommentButtonClick" 
      Foreground="{StaticResource procedure_app_orange_text }" IsTapEnabled="True"> 
     <Button.Background> 
      <ImageBrush ImageSource="Asset/step_comment.png"/> 
     </Button.Background> 
    </Button> 
    <Button IsEnabled="{Binding IsImageEnabled}" x:Name="imageButton" Width="40" Height="40" Grid.Column="3" 
      Grid.Row="1" Tag="{Binding projectId}" Click="ImageButtonClick" 
      Foreground="{StaticResource procedure_app_orange_text }"> 
     <Button.Background> 
      <ImageBrush ImageSource="Asset/step_image.png"/> 
     </Button.Background> 
    </Button> 

変更

  1. あなたListViewがあなたのView
  2. にバインドするために、あなたのButtonsのために有効な特性を含むようにニーズにバインドされたコレクション内のモデルの概要は、あなたをバインドButtons新しいプロパティへ
+0

ありがとう詳しい答えはあなたのAnthonyさんにあります。したがって、無効にしたときに画像を変更したい場合。私はncwrImageのようにProjectModelに別のプロパティを定義し、条件に応じてイメージを設定し、ImageBrushのImageSource = "{Binding ncwrImage}"のように設定する必要があります。あれは正しいですか? – Madhu

+0

イメージを変更する場合は、モデルの有効なプロパティに基づいてイメージソースを切り替えたデータトリガーを作成します。 –

+0

http://stackoverflow.com/questions/1786477/change-image-using-trigger-wpf-mvvm –

関連する問題