2

在下面的代码中,转换器中没有遇到断点。单击单选按钮不会更改活动控件。这就像 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>
4

4 回答 4

1

我无法在 RadioButton.IsChecked 中声明任何绑定。但是,通过反转问题,我确实让它工作得很好。FlipViewItem 上有一个 IsSelected 属性。我用这种方法成功了:

IsSelected="{Binding ElementName=radioButton1,Path=IsChecked,Mode=TwoWay}"
于 2012-08-17T22:53:26.913 回答
0

不确定您的转换器做了什么,但常见的问题IsChecked是它不是布尔值,而是bool?( Nullable<bool>)。那是您的转换器需要/返回的吗?

于 2012-08-03T08:33:14.667 回答
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>

您的问题是转换器参数不能是绑定值。

于 2012-08-09T17:55:23.860 回答
0

此 MSDN 博客描述了一种技术,您可以通过该技术对 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>
于 2015-01-13T22:56:39.757 回答