1
XAMLを使用する場合、TabItem内にUserControlを配置するのはかなり基本的です。TabItemでUserControlをプログラムで読み込み
<TabControl>
<TabItem>
<local:MyUserControl/>
</TabItem>
</TabControl>
しかし、ViewModelを使用してUserControlをロードしたいとします。それについてどうすればいいのですか?例えば私のViewModelには、私は上の別のタブ、ヘッダー、背景色とを移入するために使用するのObservableCollectionを持っていると仮定すると、
<TabControl ItemsSource="{Binding TabCollection}">
<TabItem Header="{Binding Header}"
Source="{Binding MyUserControl}"> <!-- Source is obviously not a property of TabItem-->
<!-- I'm just using it in this context as an example. Like how a 'Frame' would work -->
</TabItem>
</TabControl>
について、どのように私はプログラム的のTabItemでビューを移入でしょうか?
は例えば、以下のViewModelの基本的なサンプルです:
public class TabViewModel
{
// 'TabModel' is a simple class that acts as a Model for this class (TabViewModel)
// All it does is store strings, integers, etc. as properties
// i.e: the fields 'Header' and 'MyUserControl' in the below method are both strings declared in 'TabModel'
public ObservableCollection<TabModel> TabCollection { get; set; }
public TabViewModel()
{
TabCollection = new ObservableCollection<TabModel>();
PopulateTabCollection();
}
private void PopulateTabCollection()
{
TabCollection.Add(new TabModel()
{
Header = "FirstUserControl",
MyUserControl = "Views/MyFirstUserControl.xaml"
});
TabCollection.Add(new TabModel()
{
Header = "SecondUserControl",
MyUserControl = "Views/MySecondUserControl.xaml"
});
}
}
だから私はデータバインディングを介して各タブで異なるビューを表示される何をする必要がありますか。これが可能なのかどうかはわかりません。しかしそれがあれば、親切に私を教育してください。
私が気にしていたことではありませんが、これは私が探していた結果をもたらします。私はViewModelがビューのディレクトリを文字列として渡さなければならないという印象の下にあったと思います。しかし、この方法は実際にはかなりうまく機能します。ありがとう。 – Offer