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

この 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();
    }
}

次に、ページのリソースで Converter を宣言します。

<common:LayoutAwarePage.Resources>
  <conv:DistanceConverter x:Key="DistanceConverter"  
    CurrentUser="{Binding User}"
    CurrentItem="{Binding CurrentItem}"
    MaxWidthAvailable="450" />
</common:LayoutAwarePage.Resources>

最後に、アイテム Template にコンバーターを設定します。

<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 に答える
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

コンバーターが何をするかはわかりませんが、一般的な問題IsCheckedは、それが bool ではなくbool?( Nullable<bool>) であることです。それはあなたのコンバーターが受け取る/返すものですか?

于 2012-08-03T08:33:14.667 に答える