私は現時点でWPFを学んでいます。私はxamlを使うのがかなり難しいと思っています。データバインドされたviewmodelのタイプに基づいてコントロールを表示していますか?
:<UserControl x:Class="Compliance.View.AbstractEntityView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel>
<Label Content="ID:"></Label>
<TextBlock Text="{Binding Path=EntityId}"></TextBlock>
</StackPanel>
</UserControl>
が続いApp.xaml.cs
に私はこのようなOnStartup
をオーバーライドしています:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:Compliance.ViewModel"
xmlns:vw="clr-namespace:Compliance.View">
<DataTemplate DataType="{x:Type vm:Entities.AbstractEntityViewModel}">
<vw:AbstractEntityView></vw:AbstractEntityView>
</DataTemplate>
</ResourceDictionary>
AbstractEntityView
はこのようなものです。このような
<Window x:Class="Compliance.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ResourceDictionary Source="MainWindow.Resources.xaml"></ResourceDictionary>
</Window.Resources>
<Grid>
</Grid>
</Window>
そしてMainWindow.Resources.xaml
:私はこのように定義さMainWindow.xaml
を持っています
MainWindow window = new MainWindow();
//Model class
Individual ind = new Individual(1,"Name");
//subclass of AbstractEntityViewModel
var vm = new Entities.IndividualEntityViewModel(ind);
window.DataContext = vm;
window.Show();
ただし、ウィンドウに何も表示されません。
私はコントロールをレンダリングするためにthis questionの答えを使用しました。しかし、これはコードからビュー内の要素を参照する必要がありますが、これは実行したくありません。
ViewModelをdatacontextに設定して、表示するビューを選択するウィンドウを取得することはできますか? MVVMがどのように機能するのか、間違った考えがありますか?
ニート、感謝のコレクションに
ListBox
を結合する場合たとえば、何ContentControl
は必要ありません。 DataContext = "{RelativeSource = {RelativeSource Self}}"という行が私のウィンドウ定義に現れた(私はそこに置かなかったと確信しています...)私はそれを削除した後に働いた。 – Oliver@Oliverバインディングで 'Self'を参照すると、バインディングソースは' DataContext'ではなくUIオブジェクトに設定されます – Rachel