2015-01-28 4 views
0

Я создал сетку, которую я хотел бы инициировать с нулевыми или пустыми значениями. Но когда мои текстовые блоки привязаны к значению null, клик/кран не вызовет команду. Когда у меня есть значение, он отлично работает. Я также пытался использовать string.empty и "", которые тоже не будут работать. Был бы счастлив, если бы кто-то мог пролить свет на это.Почему команда не вызывается, когда значение привязки равно null?

XAML

<Grid x:Name="GridPuzzleOuter"> 
    <ItemsControl ItemsSource="{Binding Puzzle.Rows}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Grid Width="270"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition/> 
         <ColumnDefinition/> 
        </Grid.ColumnDefinitions> 
        <Border Grid.Column="0"> 
         <TextBlock Text="{Binding Cells[0].CellValue, Mode=TwoWay}"> 
          <interactivity:Interaction.Behaviors> 
           <core:EventTriggerBehavior EventName="Tapped"> 
            <core:InvokeCommandAction 
             Command="{Binding CellTappedCommand}" CommandParameter="{Binding Cells[0]}"/> 
           </core:EventTriggerBehavior> 
          </interactivity:Interaction.Behaviors> 
         </TextBlock> 
        </Border> 
        <Border Grid.Column="1"> 
         <TextBlock Text="{Binding Cells[1].CellValue, Mode=TwoWay}"> 
          <interactivity:Interaction.Behaviors> 
           <core:EventTriggerBehavior EventName="Tapped"> 
            <core:InvokeCommandAction 
             Command="{Binding CellTappedCommand}" CommandParameter="{Binding Cells[1]}"/> 
           </core:EventTriggerBehavior> 
          </interactivity:Interaction.Behaviors> 
         </TextBlock> 
        </Border> 
       </Grid> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</Grid> 

Ряды класса

public class Row : ObservableObject 
{ 
    public Cell[] Cells { get; set; } 
    private RelayCommand<Cell> _cellTappedCommand; 

    public RelayCommand<Cell> CellTappedCommand 
    { 
     get 
     { 
      return _cellTappedCommand ?? (_cellTappedCommand = new RelayCommand<Cell>((param) => Cellclick(param))); 
     } 
    } 

    private void Cellclick(Cell param) 
    { 
     var vm = (new ViewModelLocator()).Main; 
     vm.SelectedCell = param; 
     // Do stuff... 
    } 
} 

Edit: решаемые изменения XAML в:

<Border Grid.Column="0"> 
    <interactivity:Interaction.Behaviors> 
     <core:EventTriggerBehavior EventName="Tapped"> 
      <core:InvokeCommandAction 
        Command="{Binding CellTappedCommand}" CommandParameter="{Binding Cells[0]}"/> 
     </core:EventTriggerBehavior> 
    </interactivity:Interaction.Behaviors> 
    <TextBlock Text="{Binding Cells[0].CellValue, Mode=TwoWay}"> 
    </TextBlock> 
</Border> 
+0

Я думаю, вам нужно [TargetNullValue] (http://stackoverflow.com/questions/21066931/how-does-wpf-handle-binding-to-the-property-of-a-null-object) – Tuco

+0

Я думаю Я решил это самостоятельно, я просто переместил команду с текстового блока и на границу. JAT, спасибо за ваш вклад, я не знал о TargetNullValue (или FallbackValue), поэтому сегодня я узнал что-то новое! – Kaffepaus

+0

Ницца ............. – Tuco

ответ

0

Просто переместите код взаимодействия с окружающим Border и обязательно установите Background на Transparent. Задача решена.

// Удачи!

Смежные вопросы