की वजह से बाध्यकारी मूल्यांकन नहीं किया जा सकता है एक डिफ़ॉल्ट मान का उपयोग करें वहाँ एक विशेष मूल्य जब एक बंधनसंपत्ति पथ में एक शून्य मान की वजह से मूल्यांकन नहीं किया जा सकता है आवंटित करने के लिए एक तरीका है?जब एक शून्य मान
उदाहरण के लिए अगर मैं एक वर्ग ग्राहक में नाम कोई संपत्ति है, और इस तरह एक बाध्यकारी:
{Binding CurrentCustomer.Name}
जब CurrentCustomer रिक्त है मैं चाहता स्ट्रिंग "का निर्माण करने के लिए बाध्य --- "।
"TargetNullValue" और "FallbackValue" चाल नहीं लग रहा है।
आपकी मदद के लिए अग्रिम धन्यवाद।
संपादित:
तथ्य जब यह उपलब्ध नहीं है मुझे क्या करना सच के स्थान पर एक नए स्रोत मूल्य प्रतिस्थापन है कोशिश कर रहा हूँ में। वास्तविक परिदृश्य निम्न है:
एक बूल वैल्यू का उपयोग नियंत्रण की दृश्यता निर्धारित करने के लिए किया जाता है, लेकिन जब यह मान प्राप्य नहीं होता है तो मैं इसे "झूठी" से बदलना चाहता हूं।
MainPage.xaml.cs:
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
namespace TestSilverlightBindingDefaultValue
{
public class BoolToVisibilityConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return (bool)value ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
public class Customer
{
public bool HasACar
{
get;
set;
}
}
public partial class MainPage : UserControl
{
public static readonly DependencyProperty CurrentCustomerProperty =
DependencyProperty.Register("CurrentCustomer", typeof(Customer), typeof(MainPage), null);
public Customer CurrentCustomer
{
get { return this.GetValue(CurrentCustomerProperty) as Customer; }
set { this.SetValue(CurrentCustomerProperty, value); }
}
public MainPage()
{
InitializeComponent();
this.CurrentCustomer = null;
this.DataContext = this;
}
}
}
MainPage.xaml:
<UserControl x:Class="TestSilverlightBindingDefaultValue.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:local="clr-namespace:TestSilverlightBindingDefaultValue"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<UserControl.Resources>
<local:BoolToVisibilityConverter x:Key="boolToVisibilityConverter" />
</UserControl.Resources>
<StackPanel x:Name="LayoutRoot" Background="White">
<TextBlock Text="You have a car" Visibility="{Binding CurrentCustomer.HasACar,Converter={StaticResource boolToVisibilityConverter}}" />
</StackPanel>
यहाँ एक उदाहरण है कि पूरी तरह से मेरा असली यूज-केस की नकल करता है FallbackValue समाधान becaus नहीं है ई यह केवल जेनरेट वैल्यू को बदल देगा, न कि स्रोत मूल्य।
अबे HeidebrechtPriorityBinding साथ WPFके लिए एकदम सही समाधान प्रदान की गई है, लेकिन यह सिल्वरलाइट में मौजूद नहीं है।
अंतिम संपादन: अबे Heidebrecht की दूसरी समाधान, यानी एक और तत्व में रैपिंग, पूरी तरह से काम कर रहा है।
<TextBlock>
<TextBlock.Text>
<PriorityBinding>
<Binding Path="CurrentCustomer.Name" />
<Binding Source="---" />
</PriorityBinding>
</TextBlock.Text>
</TextBlock>
ठीक है, सिल्वरलाइट के लिए यह एक आवरण (एक सीमा की तरह) में तत्व रैप करने के लिए एक शायद आसान है:
मुझे नहीं पता था कि आप यह कर सकते हैं .... यदि डेटा '{x: Null}' के बराबर है तो मैंने हमेशा डेटाट्रिगर जांच का उपयोग किया है। धन्यवाद! – Rachel
धन्यवाद, यह प्रभावी रूप से समाधान होगा ... अगर मैं सिल्वरलाइट 4 का उपयोग नहीं कर रहा था जो प्राथमिकता बाइंडिंग का समर्थन नहीं करता है। – Pragmateek
मैंने जवाब को अद्यतन किया है कि इसे चांदी की रोशनी में कैसे किया जाए। –