我问,因为它似乎不起作用.
假设我们绑定到以下对象:
public class HurrDurr
{
public string Hurr {get{return null;}}
public string Durr {get{return null;}}
}
Run Code Online (Sandbox Code Playgroud)
好吧,看来如果我们使用MultiBinding来反映这一点,就会显示回退值,对吗?
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} to the {1}"
FallbackValue="Not set! It works as expected!)">
<Binding Path="Hurr"/>
<Binding Path="Durr"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
然而,结果实际上是"对".即使强制绑定返回DependencyProperty.UnsetValue也不起作用:
<TextBlock xmnlns:base="clr-namespace:System.Windows;assembly=WindowsBase">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} to the {1}"
FallbackValue="Not set! It works as expected!)">
<Binding Path="Hurr"
FallbackValue="{x:Static base:DependencyProperty.UnsetValue}" />
<Binding Path="Durr"
FallbackValue="{x:Static base:DependencyProperty.UnsetValue}" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
尝试使用TargetNullValue,它也是一个半身像.
所以似乎MultiBinding永远不会使用FallbackValue.这是真的吗,还是我错过了什么? …
我正在尝试设置FallbackValue以防万一我的转换器无法调用,但我不知道该怎么做.
<Image Source="{Binding FallbackValue="Pictures/Unknown.png", Path=LatestPosition.DeviceFamily, Converter={x:Static conv:ConverterSet.DeviceTypeToImageSourceconverter}}" Name="image1" Stretch="Fill" Margin="5,8" Width="150" Height="150" Grid.RowSpan="4" />
Run Code Online (Sandbox Code Playgroud)
转换器中外部图像的路径看起来像那样,当LatestPosition!= null时,图像以适当的方式设置.
private static readonly ImageSource Dev1 = new BitmapImage(new Uri("/Pictures/dev1.png", UriKind.Relative));
private static readonly ImageSource Dev2 = new BitmapImage(new Uri("/Pictures/dev2.png", UriKind.Relative));
Run Code Online (Sandbox Code Playgroud) 我有两个具有不同属性的类,但都继承了其他一些基类:
public class BaseClass { }
public class ClassA : BaseClass
{
public string PropertyA { get; set; }
}
public class ClassB : BaseClass
{
public string PropertyB { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
代码隐藏:
public ObservableCollection<BaseClass> Items { get; set; }
public MainWindow()
{
Items = new ObservableCollection<BaseClass>
{
new ClassA {PropertyA = "A"},
new ClassB {PropertyB = "B"}
};
}
Run Code Online (Sandbox Code Playgroud)
我的XAML看起来像这样:
<ListView ItemsSource="{Binding Items}">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding PropertyA, FallbackValue=''}"/>
<GridViewColumn DisplayMemberBinding="{Binding PropertyB, FallbackValue={x:Null}}"/>
</GridView>
</ListView.View>
</ListView>
Run Code Online (Sandbox Code Playgroud)
在调试模式下运行时,输出窗口显示: …
网络平台
对于我使用的每个 appSetting,我想指定一个值,如果在 appSettings 中找不到指定的键,则将返回该值。我本来打算创建一个类来管理它,但我想这个功能可能已经在 .NET Framework 中的某个地方了?
.NET 中是否有一个 NameValueCollection/Hash/etc 类型的类,可以让我指定一个键和一个后备/默认值——并返回键的值或指定的值?
如果有,我可以在调用它之前(从不同的地方)将 appSettings 放入该类型的对象中。
我有一个MultiBinding转换器,根据我的两个Binding字段是否评估为true来确定控件的可见性.如果由于某种原因它无法达到这些bool属性中的任何一个,我想将它们设置为true.例如:
我目前拥有的代码是:
<MultiBinding Converter="{StaticResource AndToVisibilityConverter1}" FallbackValue="Visible">
<Binding Path="IsConnected" FallbackValue="true" />
<Binding Path="CurrentUser.IsConsumerOnlyAgent" Converter="{StaticResource InvertedBooleanConverter1}" FallbackValue="True" />
</MultiBinding>
Run Code Online (Sandbox Code Playgroud)
代码运行正常,但我在IDE的输出中收到错误消息,指出:
System.Windows.Data Error: 11 : Fallback value 'True' (type 'String') cannot be converted for use in 'Visibility' (type 'Visibility'). BindingExpression:Path=IsConnected; DataItem=null; target element is 'StackPanel' (Name='');
Run Code Online (Sandbox Code Playgroud)
我已经确定了这个转换器并验证了它是XAML错误的位置.对于这里的无知感到抱歉,但有没有办法可以将FallbackValue设置为这些绑定中的每一个,以便在未能获得设置路径时评估为"true"?提前致谢
更新:
这是我的可见性转换器的代码(我在我的应用程序的几个地方使用它,只想添加回退值):
internal class AndToVisibilityConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values == null)
return Visibility.Collapsed;
foreach (var value in values)
{
if (value == …Run Code Online (Sandbox Code Playgroud)