2016-07-22 2 views
0

私のメインページには、すべてのアイテムのリストビューがあり、ユーザーがそれらのアイテムの1つをクリックすると詳細ページに移動します。ページの詳細ページには 、私は、最後の項目にジャンプする最後のボタンを作成Prism 6とBehavior SDKでボタンを無効にする方法

 <Button Content="Last" HorizontalAlignment="Center" > 
      <Interactivity:Interaction.Behaviors> 
       <Interactions:EventTriggerBehavior EventName="Click"> 
        <Interactions:InvokeCommandAction Command="{x:Bind Path=ViewModel.LastCommand, Mode=OneWay}"/> 
       </Interactions:EventTriggerBehavior> 
      </Interactivity:Interaction.Behaviors> 
     </Button> 

と、ここで私のviewmodelの一部

class DetailPageViewModel : ViewModelBase 
{ 
    private MyItem item; 
    public MyItem Item 
    { 
     get { return item; } 
     set { SetProperty(ref item, value); } 
    } 

    public DetailPageViewModel() 
    { 
     LastCommand = new DelegateCommand(LastItemExecute, CanLastItemExecute); 
     LastCommand.ObservesProperty(() => Item); 
    } 

    private DelegateCommand lastCommand; 
    public DelegateCommand LastCommand 
    { 
     get { return lastCommand; } 
     set { SetProperty(ref lastCommand, value); } 
    } 

    private bool CanLastItemExecute() 
    { 
     if (Item.Index!= 1) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

    private void LastItemExecute() 
    { 
     Item= _context.Items.Single(p => p.Index== Item.Index- 1); 
    } 
} 

すべてがあればそのを除いて、ここで正常に動作しますリストビューの最初の項目をクリックするか、2番目の項目からジャンプすると、最後のボタンは無効になりません、それでも何もしません。 しかし、詳細ページに最初のアイテム、ヘルプPLZが表示されている場合は、このボタンを無効にしますか?

答えて

0

詳細ページに最初の項目が表示されている場合は、このボタンを無効にしたいと考えています。

あなたの「最後のボタンは」DetailPageであり、私はあなたがこのDetaiPageのコントロールにデータをバインドする方法を知りませんが、あなたはマーテル/詳細パターンを使用している場合、あなたはで、公式Master/detail sampleを参照することができますItemViewModelモデルには、Item_IDというプロパティがあります。私の提案は、マスタページのListViewのデータモデルにIDの適合性を追加することもできるため、ナビゲーション後に選択したItem to Detailページ内でIDを渡すことができます。

次にDetailPageViewModelに、あなたはこのIDを取得することができますし、コンバーターでButtonIsEnableプロパティにバインド:

<Page.Resources> 
    <local:ButtonEnableConverter x:Key="cvt" /> 
</Page.Resources> 
... 

<Button VerticalAlignment="Center" HorizontalAlignment="Center" Content="Last Item" Grid.Row="3" 
     IsEnabled="{x:Bind Item.ID, Mode=OneWay, Converter={StaticResource cvt}}"> 
    <Interactivity:Interaction.Behaviors> 
     <Core:EventTriggerBehavior EventName="Click"> 
      <Core:InvokeCommandAction Command="{Binding Path=LastCommand, Mode=OneWay}" /> 
     </Core:EventTriggerBehavior> 
    </Interactivity:Interaction.Behaviors> 
</Button> 

ButtonEnableConverterのコードは次のようである:

public class ButtonEnableConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     var itemID = (int)value; 
     if (itemID != 0) 
      return true; 
     return false; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     throw new NotImplementedException(); 
    } 
} 

更新:

私はそれをテストするための完全なサンプルを書いていませんでしたが、

<Button Content="Last Item" Grid.Row="1" HorizontalAlignment="Center" > 
    <Interactivity:Interaction.Behaviors> 
     <Core:DataTriggerBehavior Binding="{Binding Item.ID, Mode=OneWay}" ComparisonCondition="NotEqual" Value="100"> 
      <Core:ChangePropertyAction PropertyName="IsEnabled" Value="True"/> 
     </Core:DataTriggerBehavior> 
     <Core:DataTriggerBehavior Binding="{Binding Item.ID, Mode=OneWay}" ComparisonCondition="Equal" Value="100"> 
      <Core:ChangePropertyAction PropertyName="IsEnabled" Value="False"/> 
     </Core:DataTriggerBehavior> 
     <Core:EventTriggerBehavior EventName="Click"> 
      <Core:InvokeCommandAction Command="{Binding Path=LastCommand, Mode=OneWay}" /> 
     </Core:EventTriggerBehavior> 
    </Interactivity:Interaction.Behaviors> 
</Button> 

試すことができます。

+0

返信いただきありがとうございます。最初に、私のモデルは実際には、メソッド "CanLastItemExecute"を見ることができ、このメソッドがfalseを返すときにボタンを自動的に無効にするはずだが、そうしなかった場合、 "Index"(IDとして機能する)プロパティを持ちます。もちろん、あなたのコードは回避する一つの方法ですが、私はコマンドバインディングに基づいた解決策が欲しいです。 –

+0

@ BrianDingしかし、私はあなたのボタンコマンドが最後のアイテムにジャンプするためのものだと思って、あなたのボタンがクリックされたときにのみコマンドを起動することができますが、最初のアイテムでボタンを無効にしたい... ... –

+0

「最後のアイテム」は、現在のアイテムのインデックスよりも小さいアイテムを意味します。たとえば、インデックス= 2のアイテムを表示している場合、最後のボタンをクリックすると、ビューモデルが最初のアイテム(インデックス= 1 )、index = 0のアイテムがないため、ボタンを無効にします。 –

関連する問題