我试图找出一种获取当前日期的方法,并将该值设置为“Completed On”,仅当Status设置为“Inactive,如果Status设置为”Active“,那么我希望Completed On为空。我认为这可以通过使用触发事件来完成。我也是用MVVM格式编写这个应用程序。
<telerik:RadGridView x:Name="dgRad" Grid.Column="0" Grid.Row="1">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn Header="Completed On"
Width="Auto"
DataMemberBinding="{Binding EndDate, Mode=OneWay}" />
<telerik:GridViewDataColumn Header="Status"
DataMemberBinding="{Binding Status, Mode=TwoWay}"
Width="Auto" IsReadOnly="False"
IsEnabled="True" IsVisible="True">
<telerik:GridViewDataColumn.CellEditTemplate>
<DataTemplate>
<ComboBox Text="{Binding Path=Status, Mode=TwoWay}">
<ComboBoxItem>Active</ComboBoxItem>
<ComboBoxItem>Inactive</ComboBoxItem>
</ComboBox>
</DataTemplate>
</telerik:GridViewDataColumn.CellEditTemplate>
</telerik:RadGridView.Columns>
答案 0 :(得分:0)
这是您在视图模型级别所需的逻辑,而不是XAML。
根据您可能使用的框架类型,有不同的方法来检测值更改,但它看起来像这样:
this.NotifyPropertyChanged += (o, e) => {
if (e.PropertyName == "Status")
{
if (this.Status == "Active") EndDate = null; //nullable DateTime?
else if (this.Status == "Inactive") EndDate = DateTime.Now;
}
};
在MVVM中,您的视图仅执行与向用户显示内容相关的操作。逻辑属于视图模型。请注意,此代码与网格中显示的订单项对象有关,而与外部视图模型无关。
希望这有助于您开始使用。
答案 1 :(得分:0)
这应该有帮助......
public class YourViewModel
{
public string Status{get;
set{
...
RaisePropertyChange("EndDate");
}
}
public string EndDate{
get{
return Status=="Active" ? "Completed On" + DateTime.Now : "";
}
}
}