使用TwoWay绑定绑定静态变量?

时间:2017-03-05 07:57:17

标签: c# wpf xaml mvvm

我正在尝试将静态变量绑定到日历,但是在使用Path绑定时,我收到一个错误,我需要TwoWay

有很多绑定静态变量的例子,但我似乎无法让任何一个例子适合我。

这是属性:

private static DateTime _vCalenderSelectedDate;

public static DateTime CalenderSelectedDate
{
    get { return _vCalenderSelectedDate; }
    set
    {
        _vCalenderSelectedDate = value;
        NotifyStaticPropertyChanged();
    }
}

这是简化的XAML:

xmlns:viewModels="clr-namespace:StaffShiftManager.ViewModels"

<Calendar SelectedDate="{Binding
    Source={x:Static viewModels:ShiftManagerViewModel.CalenderSelectedDate}, 
    UpdateSourceTrigger=PropertyChanged}" >

我尝试通过添加XAML的路径来按照大多数人的建议进行操作,但我无法让它工作;

<Calendar SelectedDate="{Binding 
    Source={x:Static viewModels:ShiftManagerViewModel.CalenderSelectedDate},
    Path=CalenderSelectedDate,
    UpdateSourceTrigger=PropertyChanged}" >

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

Binding表达式应如下所示。注意路径周围的括号。

<Calendar SelectedDate="{Binding 
    Path=(viewModels:ShiftManagerViewModel.CalenderSelectedDate)}"/>

有关详细信息,请参阅MSDN上的PropertyPath for Objects in Data Binding文章,单个属性,附加或其他类型合格部分。

答案 1 :(得分:0)

为了确保完整回答此问题,我认为链接到同一用户提出的其他相关问题的答案是相关的。

上面的问题有一句话:

NotifyStaticPropertyChanged();

我希望能够将用户在问题中的内容与答案中提供的XAML结合起来,但需要知道静态属性更改的通知是如何工作的。

我搜索并最终找到related answer,其定义为:

public static event PropertyChangedEventHandler StaticPropertyChanged;

private static void NotifyStaticPropertyChanged([CallerMemberName] string name = null)
{
    StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(name));
}