J'utilise la liaison xml avec mes contrôles wpf, le XMLDocument est une propriété exposée de ViewModel. Voici le code:Retour au convertisseur de valeur
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");
}
}
}
Et mon code XAML ressemble à ceci:
<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>
Le contrôle suivant est binded à un noeud dans mon xml:
<DatePicker DataContext="{Binding Path=XmlDataProvider}" SelectedDate="{Binding XPath=dataDocument/loan/paymentDates/paymentDate[1], Converter={StaticResource NullToDateConverter}, UpdateSourceTrigger=PropertyChanged}"/>
Mon convertisseur dans le segment de code est la suivante:
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();
}
}
Le convertisseur fonctionne comme prévu, si la valeur du noeud est vide. Il définit la valeur du contrôle datetime sur la valeur actuelle.
Mais je suis confronté au problème, que si l'utilisateur pour une raison quelconque ne change pas la valeur de datepicker et essaie de sauvegarder le xml, la valeur du nœud dans le xml reste nulle. Quelle est la meilleure façon de le faire?
Si la valeur par défaut est définie sur 'SelectedDate' de' DatePicker', cela fonctionne-t-il pour vous? –
Aucune valeur ne se propage à la source. Je peux définir la valeur par défaut pour les nœuds vides de xml. Mais serait-ce juste? – Ishan070692
Je veux dire vous si vous définissez la valeur par défaut pour 'DependencyProperty'' SelectedDate', donc s'il n'y a pas de changement, vous pouvez obtenir la valeur par défaut. –