Hallo zusammen,
ich habe eine Frage zu einem Phänomen:
<StackPanel Visibility="{Binding IsVisible,Converter={StaticResource converter}}" Orientation="Vertical" Grid.Row="1" DataContext="{Binding CurrentItem}">
<TextBlock Text="{Binding Name}"/>
<Label Content="Bitte geben Sie einen Text ein"/>
<TextBox TextWrapping="Wrap" VerticalScrollBarVisibility="Auto" AcceptsReturn="True" Text="{Binding CurrentItem,Path=Comment,UpdateSourceTrigger=PropertyChanged}"/>
<Button Content="Speichern" Command="{Binding SaveCommand}"/>
</StackPanel>
Die IsVisible Eigenschaft wird Anfangs auf false gesetzt und das CurrentItem ist definiv null.
Wenn ich den DataContext angebe, schaltet er nicht mehr auf True oder False (logisch da kein DataContext)
Wenn ich den aber entferne und direkt in den Controls darauf verweise, findet er die Property Current Item nimmer.
Etwas Ratlos bin
EDIT : Das ViewModel
private ObservableCollection<TaskModel> _internalTasks;
private CollectionViewSource _tasks;
public ICollectionView Tasks
{
get { return _tasks.View; }
set { OnPropertyChanged(() => Tasks); }
}
private TaskModel _currentItem;
public TaskModel CurrentItem
{
get { return _currentItem; }
set { _currentItem = value;
IsVisible = _currentItem != null;
OnPropertyChanged(() => CurrentItem);
}
}
private bool _isVisible;
public bool IsVisible
{
get { return _isVisible; }
set { _isVisible = value;OnPropertyChanged(() => IsVisible); }
}
private ICommand _saveCommand;
public ICommand SaveCommand
{
get
{
return _saveCommand ?? (_saveCommand = new DelegateCommand(() =>
{
var result = _currentItem.Comment;
}));
}
}
Wie sieht denn dein ViewModel aus?
Den DataContext musst du auf ein ViewModel setzen, welches die Properties IsVisible und CurrentItem enthält.
Ich habe in meine AppDictionary bereits die View und das ViewModel verbunden.
Beide Propertys sind da.
Nur findet das Stackpanel nicht.
Ein DataGrid im selben Control bindet aber ganz normal ..
Hi Ahrimaan,
gibt es DataBinding-Fehlermeldungen im Ausgabefenster?
Christian
Weeks of programming can save you hours of planning
Hi Ahrimaan,
gibt es DataBinding-Fehlermeldungen im Ausgabefenster?
Christian
Hi Christian,
wenn der DataContext weg ist , findet er CurrentItem nicht.
Wenn er den DataContext hat, findet er IsVisible nicht.
Ich war immer der Meinung, alle Controls können auf die in dem VM enthaltene Propertys zugreifen.
Sobald ich aber den DataContext aus dem StackPanel entferne scheint dem nicht so.
EDIT: Habe mal das ViewModel im obigen Beitrag gepostet
Grüße
Hi Ahrimaan,
ein paar Fragen hast du aufgeworfen:
null
ist?
/// <summary>
/// This converter does nothing except breaking the
/// debugger into the convert method
/// </summary>
public class DatabindingDebugConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
Debugger.Break();
return value;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
Debugger.Break();
return value;
}
}
Christian
Weeks of programming can save you hours of planning
Hi Ahrimaan,
ein paar Fragen hast du aufgeworfen:
- Heißt die gepostete Klasse TaskModel?
- Kannst du ausschließen, daß CurrentItem einfach
null
ist?- Kennst du den
> schon:/// <summary> /// This converter does nothing except breaking the /// debugger into the convert method /// </summary> public class DatabindingDebugConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { Debugger.Break(); return value; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { Debugger.Break(); return value; } }
Christian
Hi,
die gepostete Klasse ist das ViewModel.
TaskModel ist das Model welches meine Daten enthält.
Ja kann ich : Wenn ich mit dem Debugger reinspringe, sehe ich, wie der Wert zugewiesen wird.
Diese Klasse kannte ich bisher noch nicht
Grüße
Ahhh Ahh ..
Sorry manchmal könnte ich mich für meine eigene Dummheit schlagen :
Man sollte die Property und die SubProperty auch angeben
<StackPanel Visibility="{Binding IsVisible,Converter={StaticResource BooleanToVisiblityConverter}}" Orientation="Vertical" Grid.Row="1">
<TextBlock Text="{Binding CurrentItem.Name}"/>
<Label Content="Bitte geben Sie einen Text ein"/>
<TextBox TextWrapping="Wrap" VerticalScrollBarVisibility="Auto" AcceptsReturn="True" Text="{Binding CurrentItem.Comment,UpdateSourceTrigger=PropertyChanged}"/>
<Button Content="Aufgabe schließen" Command="{Binding SaveCommand}"/>
</StackPanel>