使用WPF和MVVM根据选择表单组合框设置当前日期

使用WPF和MVVM根据选择表单组合框设置当前日期,wpf,mvvm,Wpf,Mvvm,我正试图找到一种方法来获取当前日期,并仅当状态设置为“非活动”时才将该值设置为“已完成打开”。如果状态设置为“活动”,则我希望已完成打开为空。我认为这可以通过使用触发事件来实现。我还以MVVM格式编写了此应用程序 <telerik:RadGridView x:Name="dgRad" Grid.Column="0" Grid.Row="1"> <telerik:RadGridView.Columns> <telerik:GridViewDataC

我正试图找到一种方法来获取当前日期,并仅当状态设置为“非活动”时才将该值设置为“已完成打开”。如果状态设置为“活动”,则我希望已完成打开为空。我认为这可以通过使用触发事件来实现。我还以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>

活跃的
不活跃的

这是您希望在视图模型级别而不是在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中,视图只执行与向用户显示内容相关的操作。逻辑属于视图模型。请注意,此代码与网格中显示的行项目对象相关,而不是与外部视图模型相关

希望这能帮助你开始。

这应该会有帮助

public class YourViewModel
{
    public string Status{get;
        set{
            ...
            RaisePropertyChange("EndDate");
        }
    }

    public string EndDate{
        get{
            return Status=="Active" ? "Completed On" + DateTime.Now : "";
        }
    }
}

我如何使用Catel实现这一点我不熟悉Catel