1

私は3つのユーザーコントロールを持っています

コントロール 1
コントロール 2
コントロール 3

ItemsControl を含むスタック パネルがあります

<UserControl.Resources>
  <DataTemplate x:Key="Template1">  
      <my:UserControl1 Height="117"/>              
 </DataTemplate>    
 <DataTemplate x:Key="Template2">
  <my:UserControl3 Height="117"/>            
 </DataTemplate>    
 <DataTemplate x:Key="Template3">
   <my:UserControl3 Height="117"/>            
  </DataTemplate>    
</UserControl.Resources>  

<StackPanel Name="stackPanel3" Orientation="Vertical" VerticalAlignment="Bottom" Width="Auto">
  <ItemsControl ItemsSource="{Binding BlocksForMonth.Blocks}" ItemTemplate="{StaticResource Template1}">      
  </ItemsControl>
</StackPanel>

BlocksForMonths.Blocks はビュー モデルのリストです。Blocks クラスには、ClipType というプロパティがあります。clipType が 1 の場合は、Template1 を使用します。2 の場合はテンプレート 2 を使用します。3 の場合はテンプレート 3 を使用します。

これらのテンプレートには、さまざまなユーザー コントロールが含まれています

バインディングを介してこれを行うにはどうすればよいですか?

3 つのコントロールを含む 1 つのテンプレートを検討しましたが、可視性をバインドする方法がわかりません。

この XAML では、単一のアイテムではなくリストにバインドしています

ポール

4

1 に答える 1

2

3 つのコントロールを同じテンプレートに配置し、Visibility を使用して正しいコントロールを表示します。私がすることは、IValueConverter を構築して決定値 (あなたの場合は ClipType) を変換し、それを ConverterParameter と比較することです。等しい場合は Visibility.Visible を返し、そうでない場合は Visibility.Collapsed を返します。

<UserControl.Resources>
    <my:ClipTypeToVisibilityConverter x:Key="converter"/>
    <DataTemplate x:Key="Template">
        <StackPanel>  
            <my:UserControl1 Height="117" Visibility={Binding ClipType, Converter={StaticResource converter}, ConverterParameter=1} />              
            <my:UserControl2 Height="117" Visibility={Binding ClipType, Converter={StaticResource converter}, ConverterParameter=2} />            
            <my:UserControl3 Height="117" Visibility={Binding ClipType, Converter={StaticResource converter}, ConverterParameter=3} />            
        </StackPanel>
    </DataTemplate>    
</UserControl.Resources>  

<StackPanel Name="stackPanel3" Orientation="Vertical" VerticalAlignment="Bottom" Width="Auto">
      <ItemsControl ItemsSource="{Binding BlocksForMonth.Blocks}" ItemTemplate="{StaticResource Template}">      
      </ItemsControl>
</StackPanel>

この例では、ClipType プロパティが、表示されているリスト内の各アイテム ビュー モデルにあると想定しています。

C# のサンプル コンバーターを次に示します。

    public class ClipTypeToVisibilityConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
                var clipType = value.ToString();

                if (clipType == (string)parameter))
                    return Visibility.Visible;

                return Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

申し訳ありませんが、すべてエアコードでした。しかし、私はあなたがアイデアを得ると思います。

于 2012-08-18T21:16:25.797 に答える