| 

.NET C# Java Javascript Exception

4
Hallo zusammen.

Ich habe folgendes Konstrukt.

Es gibt ein UserControl welches lediglich 2 ContentPresenter hat.
<UserControl x:Class="UserControlExample.Views.MainContentView"
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="500">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="10"/>
<ColumnDefinition />
</Grid.ColumnDefinitions>

<ContentPresenter Grid.Column="0" Content="{Binding G1PwdView}"/>

<ContentPresenter Grid.Column="2" Content="{Binding G2PwdView}"/>
</Grid>
</UserControl>


Im ViewModel zu diesem UserControl werden die ContentPresenter gefüllt.

public MainContentViewModel()
{
G1PwdView = new PasswordControlViewModel(8, null, null) { IsEnabled = true, Header = "G1 Kennwort" };
G2PwdView = new PasswordControlViewModel(16, null, null) { IsEnabled = true, Header = "G2 Kennwort" };
}

public ViewModelBase G1PwdView { .. }
public ViewModelBase G2PwdView { .. }


Im Konstruktor der Klasse PasswordControlViewModel wird jetzt das Command gesetzt

public PasswordControlViewModel(...)
{
PasswordGenCommand = new RelayCommand(() =>
{
...
});
}

public RelayCommand PasswordGenCommand { get; private set; }


Im PasswordControlView habe ich einen Button wie folgt definiert:

<Button Grid.Column="2" Grid.Row="6" 
Content="{lex:Loc PasswordControl_Button_CreatePassword}"
HorizontalAlignment="Left"
Margin="5"
Command="{Binding PasswordGenCommand}" />


Soweit klappt alles und die Bindings mit noch ein paar anderen Werten, die ich hier weggelassen habe, funktionieren ohne
Probleme. Wenn ich aber auf den Button klicke, dann passiert gar nichts. Das Command wird einfach nicht ausgelöst und
ich habe keine Ahnung warum nicht.
Wenn ich den Button zu Testzwecken einfach mal in das MainContent UserControl verschiebe (inkl. der Command-Definition in
das MainContentViewModel), dann funktioniert das Command und wird auch ausgeführt.

Hat jemand eine Idee warum das Command im 2. UserControl nicht ausgeführt wird ??
Bin für jeden Tipp dankbar.
15.10.2013
multi1209 848 1 8
3 Antworten
0
Werden die ViewModels vom Typ 'PasswordControlViewModel' an die entsprechenden Controls gebunden? Eventuell hilft hier das DataTemplate

<DataTemplate DataType={x:Type ViewModel:PasswordControlViewModel}>
<View:PasswordControlView />
</DataTemplate>
15.10.2013
lbm1305 849 1 8
lbm1305 849 1 8
Das DataTemplate habe ich schon erstellt. Es funktionieren ja alle anderen Properties dieses ViewModels nur das Command wird nicht ausgeführt.
multi1209 15.10.2013
0
Hast Du mal mit Snoop die Bindings überprüft?

Heißt
Soweit klappt alles und die Bindings mit noch ein paar anderen Werten, die ich hier weggelassen habe, funktionieren ohne
Probleme.
dass Bindings ans PasswordControlViewModel funktionieren und nur das Command nicht?
Ansonsten könntest Du mal versuchen, den DataContext explizit zu setzen:
<ContentPresenter Grid.Column="0" Content="{Binding G1PwdView}" DataContext="{Binding G1PwdView}"/>
15.10.2013
ffordermaier 8,4k 3 9
0
Ich habe das Problem gefunden. Es lag gar nicht am Binding selbst.
In der Definition des Commands, welche ich im Konstruktor der Klasse PasswordControlViewModel gemacht habe, habe ich eine Variable verwendet, die nur innerhalb der Konstruktors gültig ist. Wenn das Command dann später ausgelöst werden soll ist die Variable nicht mehr gültig und das Command wird nicht aufgerufen. Warum aber ich keine Fehlermeldung erhalte ist mir nicht klar.

Danke aber für eure Anregungen und Tipps.
16.10.2013
multi1209 848 1 8

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH