我在XAML中有以下绑定,其中IsEnabled
的类型为bool,而Length
是Array的属性,类型为int。
<Button
Content="Press Me"
IsEnabled="{Binding MyArray.Length, FallbackValue=False}">
</Button>
当数组长度为0时,它会执行我想要的操作,当数组包含它启用的元素时,它会禁用。
但是,我没想到它会起作用,因为你不能在C#中隐式地从int转换为bool。
这样安全吗?
答案 0 :(得分:5)
这种行为似乎没有记录在任何地方,所以你不应该依赖它。
一个安全而简单的解决方案是带有DataTrigger的样式:
<Button Content="Press Me">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding MyArray.Length}" Value="0">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
答案 1 :(得分:1)
这样安全吗?
简而言之,是的,它是安全的 - 因为你有一个FallbackValue
,如果绑定失败了。
你可以使用一个好的ol&#39; DataTrigger
强>
我在WPF中忘记了他们(我最近在WinRT上工作很多 - 而且他们并没有在那里工作)
这会将触发器绑定到Length
的{{1}},然后当条件满足时 - 将按钮的MyArray
属性设置为(在本例中){{ 1}}。
IsEnabled
绑定到ViewModel上的false
您还可以在ViewModel上使用<Button Content="Press Me">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding MyArray.Length}" Value="0">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
属性,然后将bool
基于此:
public bool
并在您的Xaml中:
IsEnabled
使用public bool IsEnabled { get { return MyArray.Length > 0; } }
使用WinRT的任何人的最佳选择
您还可以创建并使用<Button
Content="Press Me"
IsEnabled="{Binding IsEnabled}}">
</Button>
,根据您之后的条件,可以回复IValueConverter
。
有关如何将转换器实现到WPF的精彩教程,请参阅http://wpftutorial.net/ValueConverters.html。
转换器实现Converter
,看起来像这样:
boolean
请勿忘记在您的用户控件/视图中引用它 - 甚至忘记在IValueConverter
中引用它,以便将其用作public class BoolToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
// Do the conversion from bool to visibility
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
// Do the conversion from visibility to bool
}
}
。
<强>实例吗
您可以根据自己的逻辑以任何方式解释自己的转换器。
在这种情况下,你可以创建一个转换器,并在Xaml中使用它,如下所示:
你可以创建一个App.xaml
,并在你的Xaml中使用它,如下所示:
StaticResource
或者只是简单地创建一个ArrayNotNullOrEmptyToBooleanConverter
,然后在你的Xaml中使用它,就像这样:
<Button
Content="Press Me"
IsEnabled="{Binding MyArray, Converter={Binding ArrayNotNullOrEmptyToBooleanConverter}}">
</Button>
希望这有帮助! :)
答案 2 :(得分:1)
我不相信它会起作用,但确实如此
零是假的,其他一切都是真的
所有可以想象的是它将它视为零,其中零是假而其他每个数字都是1且是真的 这就是MS SQL Server中的位工作方式。
我不知道在未来的.NET版本中你可以指望它。
我甚至在后备工作中工作 我在TextBox上测试过 它甚至没有抛出一个有约束力的错误 如果我给它一个像iii这样糟糕的名字就会抛出一个绑定错误 如果绑定到字符串,则会抛出绑定错误
Problem is, custom fields aren't working for the div class-above-footer.
<div class="blog-posts-bottom">
<div class="container">
<h2>Connect with C-Level Executives</h2>
<div class="blog-posts-slider">
<?php $temp_query = $wp_query;
$category_name = get_field('business_solutions_category_name');
query_posts(array(
'category_name' => $category_name,
'posts_per_page' => 5
)
);
while (have_posts()) : the_post();
$thumb_id = get_post_thumbnail_id();
$thumb_url_array = wp_get_attachment_image_src($thumb_id, 'thumbnail-size', true);
$thumb_url = $thumb_url_array[0];
?>
<div class="slider-single-post">
<div class="blog-image" style="background-image : url('<?php the_post_thumbnail_url(); ?>');"></div>
<div class="slider-post-text">
<h3><?php the_title(); ?></h3>
<p><?php the_excerpt(); ?></p>
<a href="<?php the_permalink(); ?>">Read More</a>
</div>
</div>
<?php endwhile;
$wp_query = $temp_query; ?>
</div>
</div>
</div>
<div class="above-footer-link">
<div class="container">
<h2><?php the_field('business_solutions_abovefooter_heading');?></h2>
<a href="<?php the_field('business_solutions_abovefooter_button_link');?>"><?php the_field('business_solutions_abovefooter_button_text');?></a>
</div>
</div>
或者你可以这样做
<TextBox Grid.Row="0" Grid.Column="0"
IsEnabled="{Binding ii}" PresentationTraceSources.TraceLevel="High"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Text="TexBox" />
public int ii { get { return 0; } }