2016-06-20 19 views
0

は私が監視可能なコレクションから項目を読み込むリストを持っているCOMPUTERLISTMVVM Icommand on buttonの使い方は?

<ListView x:Name="icTodoList" ItemsSource="{Binding ComputerList}" SelectedItem="{Binding SelectedComputer}" Grid.Column="3" SelectionChanged="icTodoList_SelectionChanged_1"> 

        <ListView.ItemTemplate> 
         <DataTemplate> 
          <Border BorderBrush="{Binding borderColor }" BorderThickness="2" Margin="0,0,0,1"> 
           <Grid Margin="2" Height="auto" Width="auto"> 
<Button Height="18" Command="{Binding RemoveComputer}" HorizontalAlignment="Right" ToolTipService.ShowDuration="60000" Margin="0,1,38,0" x:Name="button1_Copy" VerticalAlignment="Top" Width="25" FontSize="11" Foreground="#FF6BADF6" Content="" BorderBrush="#FF6BADF6" Grid.Column="8"/> 
           </Grid>         
          </Border> 
         </DataTemplate> 
        </ListView.ItemTemplate> 
       </ListView> 

(ショートバージョンで)ので、私は、iCommandのインターフェイスをこのように構築したのObservableCollectionから項目を削除する必要があり、私のボタンをクリック。

class ComputerViewModel : ViewModelBase 
    { 
     CustomClass _customClass = new CustomClass(); 
     public readonly ObservableCollection<Model.Model.ControleData> _ComputerList = new ObservableCollection<Model.Model.ControleData>(); 
     public ObservableCollection<Model.Model.ControleData> ComputerList { get { return _ComputerList; } } 
     public ComputerViewModel() 
     { 
      ComputerList.Add(new Model.Model.ControleData { ComputerName = "TESTMACHINE", titlePing = "online",borderColor = Genkai.BlueMain }); 
     // TextBoxText = "init"; 
      _canExecute = true; 



     } 
    private ICommand _RemoveComputer; 
     public ICommand RemoveComputer 
     { 
      get 
      { 
       return _RemoveComputer ?? (_RemoveComputer = new CommandHandler(() => RemoveComp(), _canExecute)); 
      } 
     } 
    private bool _canExecute; 

    public void RemoveComp() 
     { 
      Debug.WriteLine("close Item"); 

     } 
    public class CommandHandler : ICommand 
     { 
      private Action _action; 
      private bool _canExecute; 
      public CommandHandler(Action action, bool canExecute) 
      { 
       _action = action; 
       _canExecute = canExecute; 
      } 
      public void Execute(object parameter) 
      { 
       _action(); 
      } 

      public bool CanExecute(object parameter) 
      { 
       return _canExecute; 
      } 

      public event EventHandler CanExecuteChanged; 


     } 
} 

クリックするとアクションremovecompが実行されません。

が、これで私の見解モデルにそのので、私は私のWPFビューで何かを見逃し推測

var hwc = new CommandHandler(RemoveComp,true); 

      if (hwc.CanExecute(this)) 

       hwc.Execute(this); 

を解雇しました。

+0

にバインドしよう"Right" ToolTipService.ShowDuration = "60000" Margin = "0,1,38,0" x:Name = "button1_Copy" VerticalAlignment = "Top" Width = "25" FontSize = "11" Foreground = "#FF6BADF6"コンテンツ= "" BorderBrush = "#FF6BADF6" Grid.Column = "8" />まだ起動しない – Zwan

+1

'CanExecute'をブール値として渡すのではなく、' Func 'として渡すことをお勧めします。後で。あなたのコマンドクラスは、 'CanExecuteChanged'を呼び出すために呼び出すことができるメソッドを提供する必要もあります。このメソッドは、' CanExecute'関数が戻り値で変化するときに起動する必要があります。 –

答えて

0

VMコマンドをdatatemplateにバインドしようとしています。コンテキストが異なるため、このコマンドを見つけることはできません。 ええボタンの高さ= "18" コマンド= "{DataContext.RemoveComputerバインディング、RelativeSource = {RelativeSource AncestorType =リストビュー}}" たHorizo​​ntalAlignment = <しようとした同じ問題に見えるが、痛みは理解してしまった、そのよう

Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type controls:TypeOfYourControlOrWindow}}, Path=DataContext.YourCommand}" 
+0

私はusercontrol ComputerViewになっています:Command = "{バインディングRelativeSource = {RelativeSource AncestorType = {x:タイプコントロール:ComputerView}}は役に立たない – Zwan

+0

info for listview それが助けになる場合 – Zwan

+0

あなたは最後にコマンドを忘れましたCommand = "{バインディングRelativeSource = {RelativeSource AncestorType = {x:コントロールの種類:ComputerView}}、Path = DataContext.RemoveComputer}" – tym32167

関連する問題