【发布时间】:2018-06-22 23:51:25
【问题描述】:
我正在开发一个应用程序,我正在使用模板 10 和 MVVM 模式来进行数据处理
我有一个 DatePicker 和一个组合框,当我通过构造函数或导航到页面事件设置组合框时,组合框被设置并显示设置的值。
我的组合框用于设置两周(24 种不同的选择),因此我想添加一个事件,即每当我更改日期选择器事件时,我都会自动在组合框中设置两周,并根据所选日期显示适当的两周。
但是,当我设置一个新日期时,我的组合框变为空白或空值,什么也不显示,我的转换器将我的枚举转换为 int 值,但它没有显示在我的组合框中这是我的 xaml控制:
<DatePicker x:Name="PaymentDateSeniorityInfoDatePicker"
Date="{Binding PaymentDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource DateToDatePickerConverter}}"
DateChanged="{x:Bind ViewModel.PaymentDateChanged}"
IsEnabled="{x:Bind ViewModel.ControlEnabled, Mode=OneWay, FallbackValue='true'}"/>
<ComboBox x:Name="FortnightNumberSeniorityBonusInfoComboBox"
ItemsSource="{x:Bind ViewModel.Fortnights, Mode=OneWay}"
SelectedValuePath="Value"
DisplayMemberPath="Display"
SelectedValue="{Binding FortnightNumber, Mode=TwoWay, Converter={StaticResource EnumItemsConverter}}"
SelectedIndex="{Binding FortnightNumber, Mode=OneWay, Converter={StaticResource EnumItemsConverter}}"
IsEnabled="{x:Bind ViewModel.ControlEnabled, Mode=OneWay}"/>
这是当我导航到页面时设置我的组合框的逻辑事件
public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary<string, object> state)
{
ShowAndHideButtons();
AreAdsCollapsed = AdsCollapsed();
LoadSeniorityBonusInfo();//This method set my fortnights
await ExecutedRefreshedAsync();
await base.OnNavigatedToAsync(parameter, mode, state);
}
void LoadSeniorityBonusInfo()
{
SeniorityBonusInfo.FortnightNumber = GetFortnight(SeniorityBonusInfo.PaymentDate.Value);
SeniorityBonusInfo.DaysOfSalary = GetDaysOfSalary(LaborInfo, PersonalInfo);
SeniorityBonusInfo.SeniorityBonusPayment = CalculateSenorityBonus(SeniorityBonusInfo.DaysOfSalary, SeniorityBonusInfo.CurrentBasicSalary);
}
这是设置我新两周的活动:
public void PaymentDateChanged()
{
SeniorityBonusInfo.FortnightNumber = GetFortnight(SeniorityBonusInfo.PaymentDate.Value);
}
最后这是我的枚举转换器:
public class EnumItemsConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
if (!value.GetType().GetTypeInfo().IsEnum)
return false;
var enumName = value.GetType();
var obj = Enum.Parse(enumName, value.ToString());
return System.Convert.ToInt32(obj);
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
var enumType = (value as Enum).GetType();
return Enum.ToObject(enumType, System.Convert.ToInt32(value));
}
}
有人可以帮我解决这个问题吗?在设置另一个控件时,我忘记或跳过什么以便更新组合框等控件。
它可以毫无问题地与文本块一起使用,但在这种情况下它不起作用。
感谢一些指导谢谢!!!
更新
我正在添加一个人问我的课程。
ValidatableModelBase 是 Template10 中的一个类。Jerry Nixon 开发的Validation 库是一个 github 项目,您可以通过 github 将其添加到您的项目中。
至于 BonusDays 和 Fortnight 只是枚举,这是我的枚举:
public enum BonusDays : Int32
{
[Display(Name = "EnumBonusDays0")]
BonusDays0 = 0,
[Display(Name = "EnumBonusDays18")]
BonusDays18 = 1,
[Display(Name = "EnumBonusDays33")]
BonusDays33 = 2,
[Display(Name = "EnumBonusDays48")]
BonusDays48 = 3,
[Display(Name = "EnumBonusDays63")]
BonusDays63 = 4,
[Display(Name = "EnumBonusDays93")]
BonusDays93 = 5,
[Display(Name = "EnumBonusDays108")]
BonusDays108 = 6
}
public enum Fortnight : Int32
{
[Display(Name = "EnumFortnightQ00")]
Q00 = 0,
[Display(Name = "EnumFortnightQ01")]
Q01 = 1,
[Display(Name = "EnumFortnightQ02")]
Q02 = 2,
[Display(Name = "EnumFortnightQ03")]
Q03 = 3,
[Display(Name = "EnumFortnightQ04")]
Q04 = 4,
[Display(Name = "EnumFortnightQ05")]
Q05 = 5,
[Display(Name = "EnumFortnightQ06")]
Q06 = 6,
[Display(Name = "EnumFortnightQ07")]
Q07 = 7,
[Display(Name = "EnumFortnightQ08")]
Q08 = 8,
[Display(Name = "EnumFortnightQ09")]
Q09 = 9,
[Display(Name = "EnumFortnightQ10")]
Q10 = 10,
[Display(Name = "EnumFortnightQ11")]
Q11 = 11,
[Display(Name = "EnumFortnightQ12")]
Q12 = 12,
[Display(Name = "EnumFortnightQ13")]
Q13 = 13,
[Display(Name = "EnumFortnightQ14")]
Q14 = 14,
[Display(Name = "EnumFortnightQ15")]
Q15 = 15,
[Display(Name = "EnumFortnightQ16")]
Q16 = 16,
[Display(Name = "EnumFortnightQ17")]
Q17 = 17,
[Display(Name = "EnumFortnightQ18")]
Q18 = 18,
[Display(Name = "EnumFortnightQ19")]
Q19 = 19,
[Display(Name = "EnumFortnightQ20")]
Q20 = 20,
[Display(Name = "EnumFortnightQ21")]
Q21 = 21,
[Display(Name = "EnumFortnightQ22")]
Q22 = 22,
[Display(Name = "EnumFortnightQ23")]
Q23 = 23,
[Display(Name = "EnumFortnightQ24")]
Q24 = 24
}
我正在使用 Display 属性将显示值从英语本地化为西班牙语,反之亦然!!!
这是我的 valuedispl;帮助我进行本地化的课程:
public class ValueDisplay
{
public Enum Value { get; set; }
public string Display { get; set; }
}
这是帮助我进行本地化的枚举扩展:
public static class EnumExtensions
{
public static string Display(this Enum eValue)
{
var nAttributes = eValue.GetType().GetField(eValue.ToString()).GetCustomAttributes(typeof(DisplayAttribute), false);
var DisplayName = string.Empty;
if (nAttributes.Any())
{
DisplayName = GetLocalizeString((nAttributes.FirstOrDefault() as DisplayAttribute).Name);
return DisplayName;
}
else
{
throw new ArgumentException("No hay Attributo asignado para el Enum");
}
}
}
最后这是我的本地化字符串类
public static class LocalizeService
{
public static string GetLocalizeString(string varName)
{
return App.Loader.GetString(varName);
}
}
希望这可以为您提供足够的信息,感谢您的关注!
【问题讨论】:
标签: c# mvvm combobox uwp template10