PapstRatze
Lt. Junior Grade
- Registriert
- Aug. 2008
- Beiträge
- 436
Hey ich mal wieder und immer noch bin ich bei den DataBindings
. Ich habe diesmal ein Programm, welches einen Timer Darstellt z.B für eine Präsentation. Dafür müssen zuerst die verschiedenen Vorträger mit deren Vortragszeiten erstellt werden (siehe Bild).
Mein Ziel ist es, da ich ja dabei bin DataBindings zu lernen/verstehen möglichst viel darüber zu machen und so würde ich gerne dem Stackpanel, in dem die TextBoxen mit Min und Sek sind als Datenkontext die ausgewählte Zeitspanne zuweisen. (Da TimeSpanXY.Minute nur gelesen werden kann, habe ich mir dafür sinnfreier weise schlicht und schnell eine eigene Klasse erstellt.)
In meiner Eigentlichen Klasse gibt es eine Liste mit diesen Vorträgen, wenn ich im Programm auf + klicke soll ein neuer Vortrag der Liste hinzugefügt werden und aktiv gesetzt werden. Also der Datenkontext des Stackpanels sollte nun auf diese Instanz der Klasse Vortrag zeigen (für den Fall das ich andere bearbeiten möchte, klicke ich auf entsprechende Zahl und wieder soll der Datenkontext geändert werden.)
Und da hakt es, ich habe keine Ahnung wie ich das anstellen soll, ich bin für jeden Tipp Dankbar. (Oder bin gezwungen dies im CodeBehind erledigen zu lassen?)
Anbei Bild und Codeausschnitte, wo man auch erkennen kann, dass ich das ganze vorher nicht wirklich durchdacht hatte
Ausschnitt aus XAML:
Methode getVortrag
Klasse Vortrag:
Mein Ziel ist es, da ich ja dabei bin DataBindings zu lernen/verstehen möglichst viel darüber zu machen und so würde ich gerne dem Stackpanel, in dem die TextBoxen mit Min und Sek sind als Datenkontext die ausgewählte Zeitspanne zuweisen. (Da TimeSpanXY.Minute nur gelesen werden kann, habe ich mir dafür sinnfreier weise schlicht und schnell eine eigene Klasse erstellt.)
In meiner Eigentlichen Klasse gibt es eine Liste mit diesen Vorträgen, wenn ich im Programm auf + klicke soll ein neuer Vortrag der Liste hinzugefügt werden und aktiv gesetzt werden. Also der Datenkontext des Stackpanels sollte nun auf diese Instanz der Klasse Vortrag zeigen (für den Fall das ich andere bearbeiten möchte, klicke ich auf entsprechende Zahl und wieder soll der Datenkontext geändert werden.)
Und da hakt es, ich habe keine Ahnung wie ich das anstellen soll, ich bin für jeden Tipp Dankbar. (Oder bin gezwungen dies im CodeBehind erledigen zu lassen?)
Anbei Bild und Codeausschnitte, wo man auch erkennen kann, dass ich das ganze vorher nicht wirklich durchdacht hatte
Ausschnitt aus XAML:
Code:
<Window ...
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:Timer" ...>
<Window.Resources>
<ObjectDataProvider x:Key="SelectedTime"
ObjectType="{x:Type local:Mitglied}"
MethodName="getVortrag">
<ObjectDataProvider.MethodParameters>
<sys:String>0</sys:String> <!-- Noch statisch bis ich soweit bin... -->
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
...
<Style TargetType="Label"
x:Key="WorkingLabel">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Green"/>
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="FontSize" Value="12" />
</Trigger>
</Style.Triggers>
<Setter Property="Foreground" Value="Black" />
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="FontSize" Value="12" />
</Style>
</Window.Resources>
<Grid>
...
<StackPanel Grid.Column="0" DataContext="{Binding ElementName=listbox,Path=SelectedItem}">
...
<Label Content="1" Style="{StaticResource WorkingLabel}" />
<Label Content="+" Style="{StaticResource WorkingLabel}" />
</StackPanel>
<StackPanel Orientation="Horizontal" DataContext="{StaticResource SelectedTime}" Name="TimeHolder"> <!-- Das ist leider noch nicht der richtige Weg -->
<StackPanel Margin="5,5,5,5">
<Label Content="min:" Width="35"/>
<TextBox Text="{Binding Path=Min,Mode=TwoWay,StringFormat=00}" HorizontalAlignment="Center"/>
</StackPanel>
<StackPanel Margin="5,5,5,5">
<Label Content="sek:" Width="35"/>
<TextBox Text="{Binding Path=Sec,Mode=TwoWay,StringFormat=00}" HorizontalAlignment="Center"/>
</StackPanel>
...
</Grid>
</Window>
Code:
public Vortrag getVortrag(string number)
{
int result;
if (int.TryParse(number, out result))
{
return splitted.ElementAt(result);
}
else
{
System.Windows.MessageBox.Show("grummel");
return null;
}
}
Code:
public class Vortrag
{
int min = 00;
int sec = 00;
public int Min
{
get { return min; }
set { min = value; }
}
public int Sec
{
get { return sec; }
set { sec = value; }
}
public Vortrag() { }
public TimeSpan VortragAsTimeSpan()
{
return new TimeSpan(0, min, sec);
}
}
Anhänge
Zuletzt bearbeitet: