Ich kann die Ansicht nicht korrekt an das ViewModel binden. Wenn es angezeigt wird, zeigt es nur die Zeichenfolgenversion von dem ViewModel an.Ansicht bindet nicht korrekt an ViewModel
Ich habe gesehen: Setting Window.Content to ViewModel - simple data template not working. Aber der Link ist nicht mehr verfügbar.
Ich versuche https://msdn.microsoft.com/en-us/magazine/dd419663.aspx als Vorlage zu verwenden.
MainWindow.xaml
<Window x:Class="DemoApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:DemoApp.ViewModel"
xmlns:vw="clr-namespace:DemoApp.View">
<Window.Resources>
<DataTemplate DataType="{x:Type vm:TestViewModel}">
<vw:TestView/>
</DataTemplate>
<DataTemplate x:Key="ClosableTabItemTemplate">
<DockPanel Width="120">
<Button
Command="{Binding Path=CloseCommand}"
Content="X"
Cursor="Hand"
DockPanel.Dock="Right"
VerticalContentAlignment="Bottom"
Width="16" Height="16"/>
<ContentPresenter
Content="{Binding Path=DisplayName}"
VerticalAlignment="Center"/>
</DockPanel>
</DataTemplate>
<DataTemplate x:Key="WorkspacesTemplate">
<TabControl
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding}"
ItemTemplate="{StaticResource ClosableTabItemTemplate}"
Margin="4" />
</DataTemplate>
</Window.Resources>
<DockPanel>
<Border
Grid.Column="2"
Style="{StaticResource MainBorderStyle}">
<HeaderedContentControl
Content="{Binding Path=Workspaces}"
ContentTemplate="{StaticResource WorkspacesTemplate}"
Header="Workspaces"
Style="{StaticResource MainHCCStyle}" />
</Border>
</DockPanel>
</Window>
MainWindowViewModel.cs // für Klarheit weggelassen. Dies richtet sich korrekt auf das Ansichtsmodell. Es ist die Bindung zwischen Ansicht und Ansichtsmodell, das nicht
TestView.xaml ist
public class TestViewModel : WorkspaceViewModel, INotifyPropertyChanged,
{
public Model.Test _test;
public string DisplayName {get; set;}
public class TestViewModel(Model.Test t)
{
DisplayName = "Test Display Name";
_model = t;
}
// INofifyPropertyChanged Members removed for clarity
}
Test.cs
public class Test
{
public string FirstName {get; set;}
public string LastName {get; set;}
public static DisplayTest()
{
return new Test();
}
}
Displays: DemoApp.ViewModel.TestViewModel;
Allerdings, wenn ich an die MainWindow.xaml gehen und geben Sie tatsächlich in in eine DockPanel, wird es richtig angezeigt ...
Thank you !!
UPDATE: MainWindowViewModel.cs Eigenschaften
public ReadOnlyCollection<CommandViewModel> Commands
{
get
{
if (_commands == null)
{
List<CommandViewModel> cmds = this.CreateCommands();
_commands = new ReadOnlyCollection<CommandViewModel>(cmds);
}
return _commands;
}
}
public ObservableCollection<WorkspaceViewModel> Workspaces
{
get
{
if (_workspaces == null)
{
_workspaces = new ObservableCollection<WorkspaceViewModel>();
_workspaces.CollectionChanged += this.OnWorkspacesChanged;
}
return _workspaces;
}
}
Zeigt Ihr Hauptansichtsmodell eine Eigenschaft an, die eine beobachtbare Sammlung von TestViewModels darstellt? – leetibbett
Zeigen Sie uns die MainWindowViewModel-Eigenschaften –
wo legen Sie Ihren DataContext für Ihre Ansicht fest oder weisen Sie ihn zu? –