![見出し画像](https://assets.st-note.com/production/uploads/images/150015837/rectangle_large_type_2_c039436b7d5c3a1034a5459805330a94.png?width=1200)
Photo by
mericanadesico
XamDataGrid:TemplateFieldに配置したボタンのVisible変えるくらいでバリューコンバータなんて作りたくないのでAIに頼る
バリューコンバータって作るのと設定が面倒なのでなるべく作りたくないです。
今回はXamDataGridのTemplateFieldに配置したInvoiceの登録ボタンの表示/非表示をInvoice No.が登録されていたら非表示、Nullだったらボタンを表示するってお題です。
<Button.Style>の<Style.Triggers>にDataTriggerを設定します。
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type igDP:CellValuePresenter}}, Path=DataContext.DataItem.INVOICE_NO}" Value="{x:Null}">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
Value="{x:Null}"でNullだった場合のトリガーはできましたが、Not Nullってどーするのよ???
こういう時に頼りになるCopilotに聞いてみる。
数秒で答えてくれたのが以下のコード。
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type igDP:CellValuePresenter}}, Path=DataContext.DataItem.INVOICE_NO}" Value="{x:Null}" />
</MultiDataTrigger.Conditions>
<Setter Property="Visibility" Value="Collapsed" />
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type igDP:CellValuePresenter}}, Path=DataContext.DataItem.INVOICE_NO}" Value="{x:Null}" />
</MultiDataTrigger.Conditions>
<Setter Property="Visibility" Value="Visible" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
いや、だめなのわかるわ一発で。
その後もAIと色々話し合って出してきた答え
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<!-- INVOICE_NOがNullの場合 -->
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type igDP:CellValuePresenter}}, Path=DataContext.DataItem.INVOICE_NO}" Value="{x:Null}">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
<!-- INVOICE_NOがNullでない場合 -->
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type igDP:CellValuePresenter}}, Path=DataContext.DataItem.INVOICE_NO, TargetNullValue=''}" Value="">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
アホなのか???Nullの場合と同じじゃないか?
時間の無駄だ、できないならできないと正直に言え、と責めると
![](https://assets.st-note.com/img/1723097215045-MvdN1eGQDE.png?width=1200)
と逃げやがる。誰がこんなこと機械学習させたんだ。
Microsoftが誇るAIも匙を投げたので、自力で解決しました。
<Button.Style>
<Style BasedOn="{StaticResource MaterialDesignFlatButton}" TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type igDP:CellValuePresenter}}, Path=DataContext.DataItem.INVOICE_NO}" Value="{x:Null}">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
<Setter Property="Visibility" Value="Collapsed"/>
</Style>
DataTrigger以外のところにデフォルトで非表示にしておくと、DataTriggerが上書きするのでしょうか?? ちなみにButtonそのもののVisibilityを非表示にしておくとDataTriggerは反映されずボタンは消えたままです。
とりあえずコレで良しとします。