2017-01-28 22 views
0

ここには状況があります。ListViewチェックボックスをオンまたはオフにするボタンを有効にするWPF

私はチェックボックス付きのListViewを1つ持っています。チェックボックスはデータテンプレートとして定義されます。 スタックパネルがもう1つあり、ボタンが1つ含まれています。私の要件は、最初にウィンドウがロードされるときに、チェックボックスのどれも選択されておらず、ボタンを無効にする必要があるということです。 ユーザーがチェックボックスのいずれかをクリックすると、ボタンを有効にする必要があります。 ユーザーがすべてのチェックボックスのチェックを外すと、ボタンを無効にする必要があります。

MVVMパターンを使用しています。イベントの助けを借りて、私はこの機能を実現することができました。

私の質問は、xaml自体でこのシナリオを処理できるかどうかです。トリガーやコンバーターを使用している可能性がありますか?

私はWPFの初心者であり、WPFについての深い知識はありません。どんな助けもありがとうございます。

私はトリガーを使用しようとしました。チェックボックスはListView内にあり、データテンプレートとして定義されているので、ボタンスタイルからチェックボックスの要素名にアクセスすることはできません。事前に

<ListView x:Name="MylistView" ItemsSource="{Binding Collection}" Height="250" 
       SelectionMode="Single" 
       BorderBrush="Transparent"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <CheckBox x:Name="Checkbox" Content="{Binding Description}" IsChecked="{Binding IsEnable, Mode=TwoWay}" /> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
</ListView> 

<StackPanel Orientation="Horizontal"> 
     <Button x:Name="Save" Content="{l:Language Key=SAVE}" Width="50" Height="25" Margin="10" 
       Command="{Binding Updpate, Source={StaticResource proxy}}"> 
<Button.Style> 
//How do i refer checkbox from this level. I get only "Mylistview" control at this level 
    </Button.Style> 
    </Button> 
</StackPanel> 

感謝を次のように

ラフ概要は

答えて

1

あなたはPropertyChangedイベントとプロパティ可視性として実装を宣言する必要があります。

private bool _Visibility; 
public bool Visibility 
{ get 
     { 
     return _Visibility ; 
     } 
    set 
     { 
      _Visibility = value; 
      RaisePropertyChanged("Visibility"); 
     } 
    } 

internal void RaisePropertyChanged(string prop) 
{ 
    if (PropertyChanged != null) 
     { 
     PropertyChanged(this, new PropertyChangedEventArgs(prop)); 
     } 
} 


public event PropertyChangedEventHandler PropertyChanged; 

デザイン

<Button Name="btnsdf" Width="35" Height="35" Style="{DynamicResource MetroCircleButtonStyle}" ToolTip="Add Denomination" > 
    <Image Width="30" Source="/Images/icons/add.png" Margin="0,1,0,0"></Image> 
    <Button.Resources> 
      <Style TargetType="Button"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Visibility,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Value="true"> 
         Setter Property="Visibility" Value="Visible"></Setter> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding Visibility,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Value="false"> 
         <Setter Property="Visibility" Value="Collapsed"></Setter> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Button.Resources> 
    </Button> 

チェックボックスのオンまたはオフのイベントでIsEnabledを設定する必要があります。これがあなたにアイデアを与えることを願っています。

+0

ありがとうございます!私はこのようにすることができますが、実装によっては、IsCheckedがViewModelではなく「Model」で定義されたプロパティにバインドされています。リストビューのデータソースは、ViewModelで定義されています。ボタンIsEnabledは、ビューモデルでバインドされています。だから私は、チェックボックスのチェック/チェックを外したときにモデルからビューモデルに通信するためにイベントを使用しています。これは私の目的を果たしています。しかし、イベント通知の代わりに、私はxamlとviewmodelで処理できる方法はありますか?モデルに "IsChecked"が定義されていない場合、この回答は私の必要条件を満たすでしょう –

+0

モデルにRaisePropertyMethodを実装することもできます。 ViewModelで宣言する必要はありません。 – kritikaTalwar

+0

これがあなたを助けてくれたら、答えとして受け入れることができます。 – kritikaTalwar

関連する問題