DataTemplate
のプロパティに基づいて、カスタム クラスが使用しているを変更できるようにしたいと考えていViewModel
ます。
WPF
明確な例を見つけることができず、これが可能かどうかについて十分に知らない、または知ることができないように感じXAML
ます。
私のViewModel
プロパティは、ユーザーがアプリケーションの片側で列を折りたたんだかどうかを表します。列が折りたたまれている場合は、各ユーザーの画像のみを表示したいと思います。列が展開されている場合は、写真、姓名をStackPanel
.
私はまだ理解していない本当に基本的な何かがあるように感じます。おそらく、このようなことを試した人、またはこれを正しい方法で行う方法を知っている人を探していると思います.
ユーザー.cs
public class User
{
public string ImageFile {get; set;}
public string FirstName {get; set;}
public string LastName {get; set;}
}
ビューモデルにオブジェクトObservableCollection<User>
のコレクションを保持するためにを使用しています。User
使用したい2つのDataTemplates。(現在、デフォルトの画像とテキストを使用してどのように見えるかを確認しています)
データテンプレート
<DataTemplate x:Key="UserCollapsed">
<Image Source="/Images/anon.png"
Height="50"
Width="50"
Margin="0,5,0,0"/>
</DataTemplate>
<DataTemplate x:Key="UserExpanded">
<StackPanel>
<Image Source="/Images/anon.png"
Height="50"
Width="50"
Margin="0,5,0,0"/>
<TextBlock Text="Firstname"/>
<TextBlock Text="Lastnamehere"/>
</StackPanel>
</DataTemplate>
スタイルを作成して、それをビューの ItemsControl に適用しようとしました。また、トリガーを使用して使用するテンプレートを決定するデータ テンプレートを作成しようとしましたが、どこに行くのかよくわかりません。違う。
スタイル
<Style x:Key="userTemplateStyle" TargetType="ItemsControl">
<Setter Property="ItemTemplate" Value="{StaticResource UserExpanded}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ColumnIsCollapsed, Source={StaticResource ViewModel}}" Value="True">
<Setter Property="ItemTemplate" Value="{StaticResource UserCollapsed}"/>
</DataTrigger>
</Style.Triggers>
</Style>
XAML で ItemsControl に Style プロパティを追加すると、次の例外が発生します。
例外
{"Unable to cast object of type 'MS.Internal.NamedObject' to type 'System.Windows.DataTemplate'."}
そして、ItemsControlのItemTemplateとして使用しようとしたDataTemplate。(これは間違った方法だと思いますが、とにかく試しました)
データテンプレート
<DataTemplate DataType="{x:Type md:CUser}">
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding ColumnIsCollapsed, Source={StaticResource ViewModel}}" Value="True">
<Setter Property="DataTemplate" Value="{StaticResource UserCollapsed}"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
アイテムコントロール
<ItemsControl Visibility="{Binding ColumnVisibility}"
Style="{StaticResource userTemplateStyle}"
BorderThickness="0"
Name="itcLoggedInUsers"
Margin="0"
ItemsSource="{Binding LoggedInUsers}"
Grid.Row="1"/>