WPFにおけるフォールバックとターゲットヌル値とは何か?


WPFでは、フォールバックはバインディングフォールバック値の特徴の一つです.WPFで動作しているとき、NULL値を取得するか、ハンドルの正しいバインドを取得しない場合には、多くの場合があります.この種の状況WPFは、フォールバック値とターゲットのnull値を提供できます.つのタイプのフォールバック値が利用可能です.
  • TargetNullValue
  • FallbackValue

  • TargetNullValue
    TargetNullValueは、Objectプロパティがnullのときに代替値を表示するときに使用されます.オブジェクト値がNULLの場合、TargetNullValueはターゲットに設定されます.バインドされたプロパティがnullの場合、ターゲット値が設定されます.ターゲットのNULL値はシステムで定義されます.Windowsデータ名前空間.
    構文
    publicobjectTargetNullValue{ get; set; }
    
    
    <textblock text="{Binding Source={StaticResource Employee}, Path=Name,      BindingGroupName=bindingGroup,TargetNullValue=Please Enter a string}">
    </textblock>
    
    

    フォールバック値
    フォールバック値を使用すると、バインド時に値を取得または設定でき、値を返すことができず、バインドが失敗した場合に値を設定します.バインディングの問題が発生した場合、またはその時点で正常にバインディングソースを解決できない場合は、フォールバック値が非常に有用です.
    構文
    publicobjectFallbackValue{ get; set; }
    
    
    <window.resources>
            <bitmapimage urisource="/Resources;assests/Images/Default.webp" x:key="DefaultImage">
        </bitmapimage></window.resources>
        <img height="150" src="{ Binding ImageFile, 
                           FallbackValue={StaticResource DefaultImage}, 
                           TargetNullValue={StaticResource DefaultImage}}" width="150">
    <window.resources>
    </window.resources>
    
    
    この例では、プロジェクト内のすべてのイメージのソースを追加できますが、バインドが失敗する可能性がある理由があれば、デフォルトの画像を表示したい場合はフォールバック値を使用します.
    簡単な例を挙げましょう.
    publicclassListofEmployee
            {
               publicstringNameOfEmployee{ get; set; }
               publicintStatusCode{ get; set; }
               publicbool? IsActive{ get; set; }
               publicDateTimeJoiningDate{ get; set; }
               publicDateTime? ResineDate{ get; set; }
            }
    
    
    ここでは、我々はNULLに設定することができますし、ターゲットのnull値にデータを追加する文字列、bool、intデータ型です.
    varem = newListofEmployee();
    em.NameOfEmployee = "Ifour Technolab";
    em.IsActive = null;
    em.JoiningDate = "01-01-2005";
    em.ResineDate = null;
    this.DataContext = em;
    
    
    ここでは、プロパティヌルを設定して代替データを表示できます.
    <checkbox content="Is Active" horizontalalignment="Center" ischecked="{Binding UserName}" margin="20 8 0 0" verticalalignment="Top" x:name="TextBoxMessage"></checkbox>
            <datepicker horizontalalignment="Center" selecteddate="{Binding Path=ResineDate}" verticalalignment="Top"> </datepicker>
    
    
    これは、このバインディング形式を使用して簡単にバインドできます.ここで、プロパティをターゲットのnull値でバインドできます.
    <checkbox content="Is Active" horizontalalignment="Center" ischecked="{Binding UserName, TargetNullValue=false}" margin="20 8 0 0" verticalalignment="Top" x:name="TextBoxMessage"></checkbox>
    
    
    チェックボックスプロパティをfalseに表示し、このプロパティで今日の日付を設定できます.
    <datepicker horizontalalignment="Center" selecteddate="{Binding Path=ResineDate, TargetNullValue={x:Static sys:DateTime.Now}}" verticalalignment="Top"> </datepicker>
    
    
    続きを読む:Introduction To Datacontext And Autowire In WPF
    TargetNull値とフォールバック値を使用して使用する方法を次の手順を参照してください.
    ステップ1
    まず、Visual Studioを起動し、WPFプロジェクトを選択します.

    WPF App(. NET Framework)を選択した後、適切な名前をクリックしてボタンを作成します.
    ステップ2
    プロジェクトを作成した後、メインウィンドウを開きます.XAMLファイルと下のコードを追加するか、表示するデザインを作成できます.
    メインウィンドウ.XAML
    <window height="450" mc:ignorable="d" title="MainWindow" width="800" x:class="FallBackValues.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:FallBackValues.ViewModel" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <window.resources>
            <local:mainviewmodel x:key="VM">
            <booleantovisibilityconverter x:key="BooleanToVisibilityConverter">
        </booleantovisibilityconverter></local:mainviewmodel></window.resources>
        <grid datacontext="{Binding Source={StaticResource VM}}" horizontalalignment="Center">
            <grid.rowdefinitions>
                <rowdefinition height="Auto">
                <rowdefinition height="Auto">
                <rowdefinition height="Auto">
                <rowdefinition height="Auto">
                <rowdefinition height="Auto">
                <rowdefinition height="Auto">
                <rowdefinition height="5*">
            </rowdefinition></rowdefinition></rowdefinition></rowdefinition></rowdefinition></rowdefinition></rowdefinition></grid.rowdefinitions>
            <grid.columndefinitions>
                <columndefinition width="Auto">
                <columndefinition width="Auto">
            </columndefinition></columndefinition></grid.columndefinitions>
            <label content="User Name:" margin="0 10 0 0" x:name="LabelUserName">
            <label content="DOB:" grid.row="1" x:name="LabelDOB">
            <label content="Age:" grid.row="2" x:name="LabelAGE">
            <label content="Gender:" grid.row="3" x:name="LabelGender">
            <label content="Nationality:" grid.row="4" x:name="LabelNationality">
            <textbox grid.column="1" height="20" margin="0 10 0 0" text="{Binding UserName, FallbackValue='Vishal', TargetNullValue='Kalal'}" width="150" x:name="TextBoxUserName">
            <datepicker displaydatestart="1/1/1990" grid.column="1" grid.row="1" selecteddate="{Binding DOB, FallbackValue={x:Static sys:DateTime.Now}, TargetNullValue={x:Static sys:DateTime.Now}}" width="150" x:name="DatePickerDOB">
            <textbox grid.column="1" grid.row="2" height="20" text="{Binding Age, FallbackValue=18, TargetNullValue=18}" width="150" x:name="TextBoxAge">
            <radiobutton content="Male" grid.column="1" grid.row="3" groupname="Gender" horizontalalignment="Center" ischecked="{Binding IsMale, FallbackValue=False, TargetNullValue=False}" margin="-110 8 0 0" x:name="RadioButtonGenderMale">
            <radiobutton content="Female" grid.column="1" grid.row="3" groupname="Gender" horizontalalignment="Center" ischecked="{Binding IsFemale, FallbackValue=False, TargetNullValue=False}" margin="30 8 0 0" x:name="RadioButtonGenderFeMale">
            <checkbox content="Are you Indian?" grid.column="1" grid.row="4" horizontalalignment="Center" ischecked="{Binding IsNationalityIndian, FallbackValue=True, TargetNullValue=True}" margin="-50 8 0 0" verticalalignment="Top" x:name="CheckBoxIsNationalityIndian"><button command="{Binding RegisterButtonClicked}" content="Register" grid.columnspan="2" grid.row="5" height="20" horizontalalignment="Center" margin="20 10 0 0" width="100" x:name="ButtonLogin">
            <textblock grid.columnspan="2" grid.row="6" horizontalalignment="Center" margin="20 8 0 0" text="{Binding UserName, StringFormat='User: {0} is successfully registered!'}" visibility="{Binding IsButtonClicked, Converter={StaticResource BooleanToVisibilityConverter}}" x:name="TextBlockMessage">
    
    </textblock></button></checkbox></radiobutton></radiobutton></textbox></datepicker></textbox></label></label></label></label></label></grid></window>
    
    
    このXAMLでは、ラベル、TextBlock、RadioButton、チェックボックス、TextBox、およびボタンを追加できます.まず、バインディングに失敗したときにTargetNullValueおよびFallbackValueを設定することができます.名前が表示されない場合は、既定の名前を表示することができません.日付が表示されない場合、誕生日を設定することができます.そうでなければ、デフォルトの年齢18を設定し、チェックボックスを国籍でチェックすることができます.
    我々の非常に熟練したWPF Developerと話をしたいですか?今すぐ連絡.
    ステップ3
    次に、ViewModelという名前のフォルダーを作成すると、フォルダ内でmainViewModelのようなクラスファイル名を作成します.このビューモデルでは、バインド可能なプロパティを作成できます.
    usingPrism.Commands;
    usingPrism.Mvvm;
    using System;
    usingSystem.Collections.Generic;
    usingSystem.Linq;
    usingSystem.Text;
    usingSystem.Threading.Tasks;
    namespaceFallBackValues.ViewModel
    {
    publicclassMainViewModel :BindableBase
        {
    privatebool _isButtonClicked;
    publicboolIsButtonClicked
            {
    get{ return _isButtonClicked; }
    set{ SetProperty(ref _isButtonClicked, value); }
            }
    privatestring _nameofUser;
    publicstringNameofUser
            {
    get{ return _nameofUser; }
    set{ SetProperty(ref _nameofUser, value); }
            }
    privateDateTime _dob;
    publicDateTime DOB
            {
    get{ return _dob; }
    set
                {
    SetProperty(ref _dob, value);
                }
            }
    privatestring _age;
    publicstring Age
            {
    get{ return _age; }
    set
                {
    SetProperty(ref _age, value);
                }
            }
    privatebool _isNationalityIndian;
    publicboolIsNationalityIndian
            {
    get{ return _isNationalityIndian = true; }
    set{ SetProperty(ref _isNationalityIndian, value); }
            }
    privatebool _isMale = false;
    publicboolIsMale
            {
    get{ return _isMale; }
    set
                {
    SetProperty(ref _isMale, value);
                }
            }
    privatebool _isFeMale = false;
    publicboolIsFemale
            {
    get{ return _isFeMale; }
    set
                {
    SetProperty(ref _isFeMale, value);
                }
            }
    publicDelegateCommand<object><window.resources>RegisterButtonClicked{ get; set; }
    #region Constructor    
    publicMainViewModel()
            {
    RegisterButtonClicked = newDelegateCommand<object>(RegisterUser);
            }
    #endregion
    #region Methods  
    privatevoidRegisterUser(objectobj)
            {
    IsButtonClicked = true;
            }
    #endregion
        }
    }</object></window.resources></object>
    
    
    出力:


    結論
    このブログでは、フォールバック値とターゲットヌル値の使用方法を学びました.これは、バインドが失敗したときに代替データを表示するための使用です.