私はWPFバインディング/テンプレート化が初めてです。以下のように、テンプレート化された TabControl についていくつかの基本的な質問があります。
<TabControl x:Name="tcTabs" ItemsSource="{Binding Rooms, UpdateSourceTrigger=PropertyChanged}" Grid.Row="1" Margin="5" BorderThickness="1" IsSynchronizedWithCurrentItem="True">
<TabControl.ItemContainerStyle>
<Style TargetType="TabItem">
<Setter Property="Header" Value="{Binding Name}" />
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="130"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="22"/>
</Grid.RowDefinitions>
<ListBox Grid.Row="0" Grid.Column="0" BorderThickness="0" ItemsSource="{Binding Messages}" DisplayMemberPath="Raw" />
<ListBox Grid.Row="0" Grid.Column="1" BorderThickness="1,0,0,0" BorderBrush="#FFBBBBBB" ItemsSource="{Binding Users}" DisplayMemberPath="Nick" />
<TextBox Grid.Row="1" Grid.ColumnSpan="2" BorderThickness="0,1,0,0" BorderBrush="#FFBBBBBB" Height="22" />
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</TabControl.ItemContainerStyle>
</TabControl>
TabControl には、各タブに 2 つのリスト ボックスとテキスト ボックスが含まれています。リストボックスの 1 つにユーザー名が含まれていることは、常に必要というわけではありません。
タブにはサーバータブ、ルームタブ、プライベートタブの3種類があります。プライベート タブとサーバー タブでは、ユーザー リストが存在しないか、非表示にする必要があります。
バインドされた部屋オブジェクトに列挙型があります:
public enum IRCRoomType
{
Server,
Channel,
Private
}
列挙型に基づいてユーザー リストを自動的に非表示にするにはどうすればよいですか。コンバーターまたはトリガーによる可視性のバインディングという 2 つのアプローチのサンプルを見てきました。どちらがより良いアプローチであり、他にもありますか?
タブがなく、最初のタブが作成されたときに自動的に選択されません。どうすれば選択できますか?
タブの種類に応じて、リストボックス内の項目のスタイルに影響を与える方法はありますか? どうすればこれを達成できますか?
リンク/ヒントを探しているだけで、実際の解決策を探しているわけではありませんが、コードを提供できれば、それはボーナスになります!