在下面的代码中,转换器中没有断点。单击单选按钮不会执行任何操作来更改活动控件。就像IsChecked甚至不会触发更改事件一样。有任何想法吗?这是WinRT代码。
<Page
x:Class="TestBinding.MainPage"
IsTabStop="false"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:TestBinding"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Page.Resources>
<local:EqualsToBoolConverter x:Key="equalsToBoolConverter"/>
</Page.Resources>
<Page.TopAppBar>
<AppBar IsOpen="True" IsSticky="True">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<RadioButton
Style="{StaticResource TextRadioButtonStyle}"
Name="goItem1"
IsChecked="{Binding ElementName=flipView,Path=SelectedItem,Converter={StaticResource equalsToBoolConverter}, ConverterParameter={Binding ElementName=item1}, Mode=TwoWay}">Go 1</RadioButton>
<RadioButton
Style="{StaticResource TextRadioButtonStyle}"
Name="goItem2"
IsChecked="{Binding ElementName=flipView,Path=SelectedItem,Converter={StaticResource equalsToBoolConverter}, ConverterParameter={Binding ElementName=item2}, Mode=TwoWay}">Go 2</RadioButton>
</StackPanel>
</AppBar>
</Page.TopAppBar>
<FlipView
Name="flipView"
Background="{StaticResource ApplicationPageBackgroundThemeBrush}"
Margin="100"
Padding="10"
SelectedIndex="0">
<FlipViewItem Name="item1">
<TextBlock Text="item1"/>
</FlipViewItem>
<FlipViewItem Name="item2">
<TextBlock Text="item2"/>
</FlipViewItem>
</FlipView>
</Page>
答案 0 :(得分:1)
我无法在RadioButton.IsChecked中声明任何绑定。但是,我确实通过反转问题让这个工作得很好。 FlipViewItem上有一个IsSelected属性。我成功地采用了这种方法:
IsSelected="{Binding ElementName=radioButton1,Path=IsChecked,Mode=TwoWay}"
答案 1 :(得分:0)
不确定转换器的作用,但IsChecked
的常见问题是它不是bool,而是bool?
(Nullable<bool>
)。那是你的转换器需要/返回的吗?
答案 2 :(得分:0)
嗯,这不是布尔?你需要的。看(这很好):
<Grid Height="150">
<Grid.Resources>
<x:Boolean x:Key="MyBool">true</x:Boolean>
</Grid.Resources>
<StackPanel>
<CheckBox IsChecked="true" Content="Hello World" />
<CheckBox IsChecked="{StaticResource MyBool}" Content="Hello World" />
</StackPanel>
</Grid>
您的问题是转换器参数不能是绑定值。
答案 3 :(得分:0)
This MSDN Blog描述了一种可以使用ConverterParameters绑定的技术。
主要摘录:
ConverterParameter不是依赖属性,而是“简单”对象。在这种情况下,您不能使用绑定。所有XAML平台都有这种副作用:WP7-8,Silverlight,WPF,当然还有WinRT。
我的想法是在我的转换器上创建依赖项属性而不使用ConverterParameter:为了能够创建DP,您的转换器必须从DependencyObject继承:
public class DistanceConverter : DependencyObject, IValueConverter
{
public UserViewModel CurrentUser
{
get { return (UserViewModel) GetValue(CurrentUserProperty); }
set { SetValue(CurrentUserProperty, value); }
}
public static readonly DependencyProperty CurrentUserProperty =
DependencyProperty.Register("CurrentUser",
typeof (UserViewModel),
typeof (DistanceConverter),
new PropertyMetadata(null));
public object Convert(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
然后,我在我的页面资源中声明了我的转换器:
<common:LayoutAwarePage.Resources>
<conv:DistanceConverter x:Key="DistanceConverter"
CurrentUser="{Binding User}"
CurrentItem="{Binding CurrentItem}"
MaxWidthAvailable="450" />
</common:LayoutAwarePage.Resources>
最后,我在我的项目模板中设置了转换器:
<Rectangle HorizontalAlignment="Left" VerticalAlignment="Center"
Fill="#00FF84" Margin="10,0" Height="10"
Width="{Binding Path=CurrentItem.Distance,
Converter={StaticResource DistanceConverter}}">
</Rectangle>