【发布时间】:2016-01-29 17:59:18
【问题描述】:
我在我的 wpf 控件中使用 xml 绑定,XMLDocument 是 ViewModel 的公开属性。代码如下:
public class ViewModel : ViewModelBase
{
private XmlDocument _xmlDataProvider;
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
base.RaisePropertyChangedEvent("Name");
}
}
public XmlDocument XmlDataProvider
{
get { return _xmlDataProvider; }
set
{
_xmlDataProvider = value;
base.RaisePropertyChangedEvent("XmlDataProvider");
}
}
}
我的 XAML 代码如下所示:
<UserControl x:Name="ctrlTemplate" x:Class= "CtrlTemplate"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WPFControl.UI"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:xckt="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"
mc:Ignorable="d"
DataContext="{DynamicResource ViewModel}">
<UserControl.Resources>
<local:ViewModel x:Key="ViewModel" />
</ResourceDictionary>
</UserControl.Resources>
以下控件绑定到我的 xml 中的一个节点:
<DatePicker DataContext="{Binding Path=XmlDataProvider}" SelectedDate="{Binding XPath=dataDocument/loan/paymentDates/paymentDate[1], Converter={StaticResource NullToDateConverter}, UpdateSourceTrigger=PropertyChanged}"/>
我在代码段中的转换器如下:
public class NullToDateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (String.IsNullOrEmpty(value.ToString()))
{
return DateTime.Now.Date;
}
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value.ToString();
}
}
如果节点的值为空,转换器将按预期工作。它将日期时间控件的值设置为当前值。
但我面临的问题是,如果用户出于任何原因没有更改 datepicker 的值并尝试保存 xml,则 xml 中节点的值仍然为空。最好的方法是什么?
【问题讨论】:
-
如果默认值设置为
SelectedDate的DatePicker那么它对你有用吗? -
没有值不会传播回源。我可以为 xml 的空节点设置默认值。但这对吗?
-
我的意思是,如果您为
DependencyProperty设置默认值SelectedDate,那么如果没有更改,那么您可以获得默认值。
标签: c# xml wpf converter xmldataprovider