使用WPF和MVVM基于选择形式ComboBox设置当前日期

时间:2014-03-06 19:46:27

标签: wpf mvvm

我试图找出一种获取当前日期的方法,并将该值设置为“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>

2 个答案:

答案 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 : "";
        }
    }
}