Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF/MVVM:需要支持方法/函数逻辑的属性声明_Wpf_Mvvm - Fatal编程技术网

WPF/MVVM:需要支持方法/函数逻辑的属性声明

WPF/MVVM:需要支持方法/函数逻辑的属性声明,wpf,mvvm,Wpf,Mvvm,我为两个WPF组合框设置了两个属性:一个用于月,一个用于日。MonthIndex属性如下所示: private int monthIndex = DateTime.Today.Month - 1; public int MonthIndex { get { return monthIndex; } set { if (monthIndex != value) { monthIndex = value;

我为两个WPF组合框设置了两个属性:一个用于月,一个用于日。
MonthIndex
属性如下所示:

private int monthIndex = DateTime.Today.Month - 1;

public int MonthIndex
{
    get { return monthIndex; }
    set
    {
        if (monthIndex != value)
        {
            monthIndex = value;
            RaisePropertyChanged("MonthIndex");
        }
    }
} 
我需要设置DayIndex属性,但与Month属性不同,它需要计算-不能使用像这样的简单声明

private int _dayIndex = DateTime.Today.Day - 1;
每个日历日可以有0个或多个事件。e、 例如,如果6/30有三个事件,这些事件将被存储为30、30.1和30.2(在可观察的收集日列表和每个事件的相应索引中)

下面是DayIndex的XAML、声明和方法:

查看

<ComboBox Name="cboDay"
          ItemsSource="{Binding DaysList, Mode=OneTime}"
          DisplayMemberPath="fltDay"
          SelectedIndex="{Binding DayIndex, Mode=TwoWay}"
          IsEditable="True" />
public ObservableCollection<Day> DaysList { get; set; }
private int _dayIndex;

public int DayIndex
{
    get
    {
        // perform some calculation logic;
        return _dayIndex;
    }

    set
    {
        if (_dayIndex != value)
        {
            _dayIndex = value;
            RaisePropertyChanged("DayIndex");
        }
    }
}

视图模型

<ComboBox Name="cboDay"
          ItemsSource="{Binding DaysList, Mode=OneTime}"
          DisplayMemberPath="fltDay"
          SelectedIndex="{Binding DayIndex, Mode=TwoWay}"
          IsEditable="True" />
public ObservableCollection<Day> DaysList { get; set; }
private int _dayIndex;

public int DayIndex
{
    get
    {
        // perform some calculation logic;
        return _dayIndex;
    }

    set
    {
        if (_dayIndex != value)
        {
            _dayIndex = value;
            RaisePropertyChanged("DayIndex");
        }
    }
}
public observetecollection DaysList{get;set;}
私人综合指数;
公共整数日索引
{
得到
{
//执行一些计算逻辑;
返回日指数;
}
设置
{
如果(_dayIndex!=值)
{
_dayIndex=数值;
RaisePropertyChanged(“DayIndex”);
}
}
}

如何处理dayIndex的声明,使其保持更新状态(以便我可以将其值用于其他代码)?

不要在属性getter中执行任何计算。而是计算新的属性值,集合
DayIndex=calculatedValue
。就像@Clemens所说的,我确信你不需要每次都重新计算这个值。您必须确定需要重新计算它的位置(当您加载数据时;当您更改月份时;以及当您创建新事件时,可能?),然后从那里调用计算并相应地更新
DayIndex
值模式比ItemsSource/SelectedIndex多。只要保持引用同步(SelectedIndex中的实例必须在ItemsSource中),您就已经完成了,继续下一个任务?不要在属性getter中执行任何计算。而是计算新的属性值,集合
DayIndex=calculatedValue
。就像@Clemens所说的,我确信你不需要每次都重新计算这个值。您必须确定需要重新计算它的位置(当您加载数据时;当您更改月份时;以及当您创建新事件时,可能?),然后从那里调用计算并相应地更新
DayIndex
值模式比ItemsSource/SelectedIndex多。只要保持引用同步(SelectedIndex中的实例必须在ItemsSource中),您就已经完成了,继续下一个任务?