0

奇妙な問題があります。2つのスタックパネルがあり、それぞれにボタンがあり、両方のスタックパネルのデータコンテキストは同じであり、ボタンのIsEnabledプロパティも同じプロパティに設定されています。ただし、一方のボタンは無効になり、もう一方のボタンは有効になります。

StackPanel#1(有効):

<StackPanel Orientation="Horizontal" Grid.Row="2" Grid.Column="1" Height="23"  DataContext="{Binding ElementName=LayoutRoot, Path=DataContext}">
    <TextBox Grid.Row="0" Grid.Column="1" Height="23" Width="220" Name="txtBarcode"></TextBox>
    <Button IsEnabled="{Binding CanAdd}" cal:Click.Command="{Binding AddBarcodeCommand}" Width="40" Content=". . ." Margin="5,0"></Button>
</StackPanel>

StackPanel#2(無効):

<StackPanel Orientation="Horizontal" Grid.Row="3" Grid.Column="1" HorizontalAlignment="Right"  DataContext="{Binding ElementName=LayoutRoot, Path=DataContext}" >
    <Button HorizontalAlignment="Right" cal:Click.Command="{Binding ElementName=LayoutRoot, Path=DataContext.SaveCommand}" Grid.Row="3" Grid.Column="1" Height="30" Content="Create Batch" Width="130"></Button>
    <Button IsEnabled="{Binding CanAdd}" Height="30" Content="Apply" Width="130" HorizontalAlignment="Right" Margin="5,0"></Button>
</StackPanel>

出力ウィンドウにデータバインディングエラーは表示されませんでした。足りないものはありますか?

4

1 に答える 1

2

これはおそらく、最初のボタンのコマンドが原因です。

cal:Click.Command="{Binding AddBarcodeCommand}

そのコマンドにCanExecuteメソッドが定義されている場合、そのメソッドがfalseを返すと、ボタンが無効になります。

それはまた適用されるかもしれませんSaveCommand

IsEnabledバインディングを削除してCanExecute、コマンドのポイントとして実行させますが、CanExecuteロジックを修正する
か、削除してIsEnabledバインディングを機能させる こともできます。

于 2012-07-12T11:19:05.913 に答える