C# 根据DataGrid SelectedItem属性更改按钮内容
我有一个WPF窗口和一个Viewmodel,我需要更改按钮的内容以适应Datagrid中SelectedItem的属性 例如:C# 根据DataGrid SelectedItem属性更改按钮内容,c#,wpf,mvvm,datagrid,C#,Wpf,Mvvm,Datagrid,我有一个WPF窗口和一个Viewmodel,我需要更改按钮的内容以适应Datagrid中SelectedItem的属性 例如: DataGrid绑定到具有两个属性的任务列表:Name和EndDate。如果EndDate为空,我希望按钮显示“结束任务”,如果不为空,则显示“恢复任务” 如果SelectedItem为空,我设法隐藏了按钮,但我想不出一种方法来实现这一点 下面是我为按钮准备的XAML代码: <DataGrid AutoGenerateColumns="False"
DataGrid绑定到具有两个属性的任务列表:Name和EndDate。如果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>
但是按钮不显示任何文本。如何执行此操作?您可以使用另一个数据触发器根据所选任务结束日期值设置按钮上的内容
<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>
谢谢您的回答,我更改了xaml,但它不显示“恢复任务”。我想我需要实现一个ValueConverter来实现这一点……如果您想在“SelectedTask”更改时触发“ButtonText”的更新,那么您应该在SelectedTask为空的情况下定义一个额外的默认返回。
<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>
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"; }
}