0

私は 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のノードの値がnullのままになるという問題に直面しています。そうするための最良の方法は何ですか?

4

1 に答える 1