gpt4 book ai didi

c# - 根据 DataGrid SelectedItem 属性更改按钮内容

转载 作者:行者123 更新时间:2023-12-03 10:27:43 28 4
gpt4 key购买 nike

我有一个 WPF 窗口和一个 Viewmodel,我需要更改按钮的内容以适应 Datagrid 中 SelectedItem 的属性。

例如:
DataGrid 绑定(bind)到具有两个属性的任务列表:名称和结束日期。如果 EndDate 为空,我希望按钮显示 '结束任务' 如果不为空则显示 '恢复任务'
如果 SelectedItem 为空,我设法隐藏了按钮,但我想不出办法来做到这一点。

这里是 XAML 我为按钮提供的代码:

<DataGrid AutoGenerateColumns="False" 
ItemsSource="{Binding Tasks}"
x:Name="dg"
SelectedItem="{Binding SelectedTask}">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="End Date" Binding="{Binding EndDate}"/>
</DataGrid.Columns>
</DataGrid>

<Button Content="{Binding ButtonText}"
Name="btn_close_resume"
Command="{Binding CloseResumeCommand}"
CommandParameter="{Binding ElementName=dg, Path=SelectedItem}">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedTask}" Value="{x:Null}">
<Setter Property="IsEnabled" Value="False"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>

查看型号 我有这样的 ButtonText 属性:
public string ButtonText
{
get { return this.SelectedTask.EndDate == null ? "Close Task" : "Resume Task"; }
}

但按钮不显示任何文本。
我怎样才能做到这一点?

最佳答案

您可以使用另一个 DataTrigger 根据 SelectedTask EndDate 值设置按钮上的内容

<Button
Name="btn_close_resume"
Command="{Binding CloseResumeCommand}"
CommandParameter="{Binding ElementName=dg, Path=SelectedItem}">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Content" Value="Resume Task"/>
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedTask}" Value="{x:Null}">
<Setter Property="IsEnabled" Value="False"></Setter>
</DataTrigger>

<DataTrigger Binding="{Binding SelectedTask.EndDate}" Value="{x:Null}">
<Setter Property="Content" Value="Resume Task"/>
</DataTrigger>

</Style.Triggers>
</Style>
</Button.Style>
</Button>

但是,当在 datagridview 上没有选择任何内容时,您没有说按钮内容的默认值是什么,按钮会说“恢复任务”,直到选择了某些内容。如果您需要更改此设置,则需要使用转换器。

如果你真的想通过 View 模型来做,你必须在 SelectedTask setter 中通知更改:
 public Task SelectedTask
{
get { return selectedTask; }
set
{
selectedTask = value;
OnPropertyChanged("SelectedTask");
OnPropertyChanged("ButtonText");
}
}


public string ButtonText
{
get { return this.SelectedTask.EndDate == null ? "Close Task" : "Resume Task"; }
}

关于c# - 根据 DataGrid SelectedItem 属性更改按钮内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32336388/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com