从已知的视图访问属性他的视图模型

本文关键字:视图 模型 属性 访问 | 更新日期: 2023-09-27 18:30:06

我有一个包含用户控件的视图,该控件有自己的视图&视图模型。

用户控件的视图如下:

<UserControl.DataContext>
    <viewmodel:TimePickerViewModel x:Name="timePickerViewModel"/>
</UserControl.DataContext>

在用户控件的视图模型中,我有一个属性ValidTime:

public DateTime? ValidTime
{
    get { return validTime; }
    set
    {
        validTime = value;
        OnPropertyChanged("ValidTime");
    }
}

在包含用户控件的视图中,我需要访问属性ValidTime:

<timepicker:TimePickerView Grid.Row="0" x:Name="timePicker"/>
<Button Grid.Row="1" Content="Plan" Command="{Binding PlanCommand}" CommandParameter="    {Binding ElementName=timePicker, Path=ValidTime}"/>

在最后一个视图的视图模型中,我有这样的:

public ICommand PlanCommand
{
    get { return planCommand ?? new RelayCommand<DateTime?>(Plan); }
}
void Plan(DateTime? date)
{
    if(pickedMagnet != null)
            pickedMagnet.StartDatePlanned = date;
}

但是DateTime?我在Plan方法中收到的参数始终为null。但在调试模式下,我看到属性ValidTime被分配了一个值。我也试过这个:

<Button Grid.Row="1" Content="Plan" Command="{Binding PlanCommand}" CommandParameter="{Binding ElementName=timePicker.timePickerViewModel, Path=ValidTime}"/>

<Button Grid.Row="1" Content="Plan" Command="{Binding PlanCommand}" CommandParameter="{Binding ElementName=timePicker, Path=timePickerViewModel.ValidTime}"/>

但这些都不起作用。

有人知道针对我的情况的解决方案或最佳实践吗?

从已知的视图访问属性他的视图模型

经过一番尝试,我用这种方式修复了它。

CommandParameter="{Binding ElementName=timePicker, Path=DataContext.ValidTime}"