Возможно ли обновить исходное значение привязки данных с помощью установленного TargetNullValue в случае, если оно равно ‘null’?

#c# #wpf #data-binding #textbox

#c# #wpf #привязка данных #текстовое поле

Вопрос:

Просто из интереса….

В случае, если у меня есть ViewModel с неинициализированной строкой, которая привязана к текстовому полю, я могу использовать TargetNullValue для отображения значения по умолчанию. Однако мне было интересно, могу ли я использовать то же значение для обновления строки в случае, если это так null ?

В основном вместо

     set
    {
        if(value != null) text = value;
        else value = "defaultstring";
        OnPropertyChanged();
    }  
  

просто сделайте то же самое из привязки данных с помощью TargetNullValue .

Ответ №1:

Вы можете манипулировать средством получения, так как привязка данных будет использовать get():

     private string text;

    public string Text
    {
        get
        {
            if (text== null)
                return "default value";
            else
                return this.text;
        }
        set { this.text= value; }

    }
  

Однако, если вы хотите сделать это в чистом XAML, вы можете использовать DataTrigger для этого:

 <TextBlock Text="{Binding MyText}">
   <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock }">
            <Style.Triggers>
                <DataTrigger Binding="{Binding MyText}" Value="{x:Null}">
                    <Setter Property="Text" Value="DefaultValue"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>
  

Комментарии:

1. Конечно, я могу, но остается вопрос, могу ли я сделать то же самое из xaml / view, используя только привязку данных. Это скорее риторический вопрос 😉

2. mhh.. вы могли бы использовать ValueConverter … но я думаю, что это не тот ответ, который вы ищете. В этом случае ответ ОТРИЦАТЕЛЬНЫЙ, вы не можете сделать это в чистом XAML, только менее удобными способами, такими как ValueConverter или DataTrigger, который заменяет текст, если значение равно null.

3. я добавил вариант чистого XAML с DataTrigger

4. Ах да, триггер данных …. вероятно, в таком случае было бы правильным. Спасибо! Отметит ответ, как только он сообщит мне

5. Рад, что смог помочь 🙂 Пожалуйста, отметьте это как ответ, если это помогло вам, чтобы другие тоже могли его найти