2016-04-29 14 views
1

私はWPFの新機能がとても便利です。 https://toggleswitch.codeplex.com/複数のBoolをWPFの可視性コンバータに変換する

基本的に4つのラジオボタンが4つのxamlファイルにバインドされています(前述のリンクのデモにあるように)。さんはその後、私はこれらのファイルのいずれかのために同じものを作りたかったBase1.xml、Base2.xmlなど

それらを呼ばれてみましょう。 私は3つのxamls - Sub1.xml Sub2.xml Sub3.xml用に3つのラジオボタンをBase2.xmlに入れました。私は論理をコピーして、問題に遭遇しました。 Subx.xmlの1つが常に表示されます。これは/問題を目に見える崩壊していると、ので、私は、このリンクから解決しようとした目に見える/隠さなければならないことを

でも、私は: http://www.rhyous.com/2011/02/22/binding-visibility-to-a-bool-value-in-wpf/

をしかし、それは動作しません...

ここに私のメインのですXAML:

<ResourceDictionary> 
    [...] 
     <BooleanToVisibilityConverter x:Key="VisibilityConverter"/> 
</ResourceDictionary> 
<Grid> 
    <Grid Margin="10"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 

     <StackPanel x:Name="LinksStackPanel" Orientation="Horizontal"> 
      <RadioButton Style="{StaticResource LinkStyle}" x:Name="VLink1" Content="LINK1" Margin="0,0,25,0" IsChecked="True" /> 
      <RadioButton Style="{StaticResource LinkStyle}" x:Name="VLink2" Content="LINK2" Margin="0,0,25,0"/> 
      <RadioButton Style="{StaticResource LinkStyle}" x:Name="VLink3" Content="LINK3" Margin="0,0,25,0"/> 
      <RadioButton Style="{StaticResource LinkStyle}" x:Name="VLink4" Content="LINK4" Margin="0,0,25,0"/> 
     </StackPanel> 
     <Grid Grid.Row="1" Margin="0,10,0,0"> 
      <MyApp:Link1 Visibility="{Binding ElementName=Link1, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/> 
      <MyApp:Link2 Visibility="{Binding ElementName=Link2, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/> 
      <MyApp:Link3 Visibility="{Binding ElementName=Link3, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/> 
      <MyApp:Link4 Visibility="{Binding ElementName=Link4, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/> 
     </Grid> 
    </Grid> 
</Grid> 

そして、ここでは私のLink2.xamlです:

<UserControl.Resources> 
    <ResourceDictionary> 
     [...] 
     <BooleanToVisibilityConverter x:Key="VisibilityConverter"/> 
    </ResourceDictionary> 
    </UserControl.Resources> 

    <Grid Margin="10"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 

     <StackPanel x:Name="LinksStackPanel" Orientation="Horizontal" Margin="0,0,0,0" > 
      <RadioButton Style="{StaticResource LinkStyle}" x:Name="vSubLink1"  Content="SubLink1"  Margin="25,0,25,0"/> 
      <RadioButton Style="{StaticResource LinkStyle}" x:Name="vSubLink2" Content="SubLink2" Margin="0,0,25,0"/> 
      <RadioButton Style="{StaticResource LinkStyle}" x:Name="vSubLink3"  Content="SubLink3"  Margin="0,0,25,0"/> 

     </StackPanel> 
     <Grid Grid.Row="1" Margin="0,10,0,0"> 
     <MyApp:SubLink1 Visibility="{Binding ElementName=vSubLink1, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/> 
     <MyApp:SubLink2 Visibility="{Binding ElementName=vSubLink2, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/> 
     <MyApp:SubLink3 Visibility="{Binding ElementName=vSubLink3, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/> 
     </Grid> 
    </Grid> 

問題を解決する方法を教えてください。

+0

だから、あなたはおそらく、あなた自身のEnumToBooleanConverterを持つ単一のプロパティにバインドされ、あなたのラジオボタンを、持っているかの一意のグループ名でグループにラジオボタンを割り当てない限り、一度に複数のラジオボタンをチェックすることができます。あなたの "IsChecked"は何かに縛られる必要があります。 –

+0

BoolToVisibilityConverterのコードを更新してください。あなたのコードは正常であると思われ、期待どおりに動作するはずです。 – ViVi

答えて

1

バインディングで要素名が間違っています!以下のコード変更を試し、問題があれば元に戻してください。

<MyApp:Link1 Visibility="{Binding ElementName=VLink1, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/> 
<MyApp:Link2 Visibility="{Binding ElementName=VLink2, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/> 
<MyApp:Link3 Visibility="{Binding ElementName=VLink3, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/> 
<MyApp:Link4 Visibility="{Binding ElementName=VLink4, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"/> 
+0

申し訳ありませんが、私は記録されていないとして投稿します。 @Vishakh Babu - 私は自分のリンクの名前を変更していましたが、間違いを犯しましたが、この部分はうまくいきました。サブリンクに問題があります – FindResults

+0

BoolToVisibilityConverterのコードを更新してください。あなたのコードは正常であると思われ、期待どおりに動作するはずです – ViVi

+0

それでも動作しません。私はWPFについて、MVVMについてもっと読む必要があると思う。とにかくありがとう。 – FindResults

0

あなたはどのように私の問題を解決する方法を教えていただけますか?

脇に...あなたは必ずしもコンバータを使用する必要はありません。ビューに公開されているか、MVVMを使用している場合は、可視性プロパティに直接バインドできます。そして、ページのDataContextのがプロパティでVMまたはビューに設定されていると仮定して、このような

としてあなたXAMLでバインド

public Visibility IsSendAvailable 
{ 
    get { return CanSend ? Visibility.Visible : Visibility.Collapsed; } 
    set { _IsSendAvailable = value; OnPropertyChanged("IsSendAvailable"); } 
} 

:このような私は私のVM上の特定のロジックを行う場所として、 IsSendAvailable。それは世界への変更を発表するINotifyPropertyChangeOnPropertyChangedメソッドを使用する方法


注意。私は私のブログにMVVMの概要を提供します。

Xaml: ViewModel Main Page Instantiation and Loading Strategy for Easier Binding

関連する問題