versuch als ElementName mal LayoutRoot anzugeben und beim Path einfach mal ein "DataContext." vorhängen
also dass es so ausschaut
{Binding ElementName=LayoutRoot, Path=DataContext.MyProperty}
Hallo,
Svg2Xaml könnte was für dich sein
Ich fand den Film Gesetz der Rache ziemlich gut.
Da fragt man sich was man selbst in so einer Situation tun würde und vorallem wie weit man gehen würde...
Du könntest auch (wenn das ViewModel den Command beinhaltet und dieser dem
DataContext deiner View zugewiesen ist) folgendes machen:
<DataTemplate>
<Button Content="O"
Width="50"
Command="{Binding ElementName=LayoutRoot, Path=DataContext.ShowTicketCommand}" DataContext="{Binding}" />
</DataTemplate>
hmm übersehe ich etwas? O.o
Hier ist ein Artikel bei CodeProject der dein Problem lösen dürfte
um genauer zu wissen ob es die Temperatur der Graka ist dann teste deine GraKa mal
mit Funmark (Kantenglättung aus, Auflösung 1024x768, kein Fullscreen). Es kann auch
sein dass die Wärmeleitpaste mal erneuert werden muss.
Bei nem freund hat sich die GraKa immer bei zu viel Hitze abgeschaltet... Naja bei dem war auch der Lüfter der GraKa kaputt.
Du kannst auch die Language im XAML setzen
Ich habe hier auch noch folgenden Code gefunden.
Auch schon versucht ElementName wegzulassen?
Ich gehe mal davon aus dass das VM bereits dem DataContext zugewiesen worden ist.
in dem Fall kannst du folgendes machen:
<Liste ItemSource="{Binding IrgendeineObersableCollectionSource}">
<Template etc>
<TextBox Property1="{Binding PropertyXY}" Property2="{Binding ElementName=LayoutRoot, Path=DataContext.Property Z}" />
</Template etc>
</liste>
Dieser Post dürfte dir sicherlich weiterhelfen
here-it-is-the-updatesourcetrigger-for-propertychanged-in-silverlight
Also meinst du sowas wie Word es Integriert hat?
(Dort wird auch das Herunterfahren verhindert wenn noch ungespeicherte Daten vorhanden sind. Sobald der User dann eine Option gewählt hat wird heruntergefahren)
Du kannst dafür eine ObservableCollection<TabItem> verwenden. Einfach die Collection an die ItemsSource des Controls binden
Die Tabitems werden so generiert wie diese in der Collection auftauchen
Ich habe in der MSDN etwas hilfreiches gefunden
How to: Enable Optimistic Concurrency Checks
Danke an alle die geantwortet haben!
Vielen Dank an alle soweit
Da sind ja einige Stichworte zusammengekommen und die Empfehlungen scheinen in eine Richtung zu gehen.
Ich werde mal mit den DataSets und DataAdapter etwas herumexperemtieren und schauen was so bei rum kommt
Hallo zusammen,
was passiert eigentlich wenn ein Datensatz aus der Datenbank an zwei verschiedenen
Rechnern bearbeitet wird und die User nahezu gleichzeitig die Daten wieder in die
Datenbank speichern wollen?
Meine Überlegung ist dass der Datensatz der zuletzt bei der Datenbank ankommt auch
übernommen wird
Die zweite frage wäre was passiert wenn ein Benutzer einen Datensatz lädt und dann
seinen Rechner in den Ruhezustand schickt. Kann der Benutzer dann den Datensatz
wieder speichern? Muss man die Verbindung wieder neu aufbauen und die Daten
aktualisieren?
@malignate: danke für die Verwendungsmöglichkeit ^^
@iced-t89: Wie gesagt ich weiss nicht wofür man es gebrauchen kann da ja sogut wie alles über Bindings möglich ist.
Als ich mir den Code zusammengesucht hatte brauchte ich eine möglichkeit um vom DatePicker das CalendarClosed-Event im ViewModel zu verarbeiten. Mittlerweile ist dafür ein Converter im Einsatz.
Du solltest CL_Main in Usercontrol oder UIElement ändern.
Wenn du unbedingt sicherstellen musst dass die Liste da vorhanden sein muss im
Parameter dann erstelle ein Interface, definiere dort die Liste, Implementiere das
Interface in der CL_Main Klasse und verlange dieses Interface als Parameter
(public MyChildWindow(ICL_Main formMain)).
Ich scheine noch nicht die neueste Version von Thunderbird zu haben...
Wäre ein Converter nicht eine Lösung?
Beschreibung:
Hallo zusammen,
ich weiss nicht wofür das im MVVM nützlich sein sollte da man ja eigentlich alles mittels Bindings lösen kann, aber dennoch Poste ich mal eine Möglichkeit um einen Command mittels Event auszulösen
Wichtig ist dass vorher das Blend SDK für Silverlight Heruntergeladen und Installiert wird.
Ein Verweis auf die System.Windows.Interactivity (zu finden unter C:\Program Files (x86)\Microsoft SDKs\Expression\Blend\Silverlight\v4.0\Libraries) hinzugefügt wird
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Interactivity;
using System.Reflection;
using System.Linq;
namespace EventToCommand
{
public class EventToCommandCore : TriggerAction<DependencyObject>
{
#region DelegateCommands
public static readonly DependencyProperty CommandParameterProperty =
DependencyProperty.Register( "CommandParameter", typeof( object ), typeof( EventToCommandCore ), null );
public static readonly DependencyProperty CommandProperty =
DependencyProperty.Register( "Command", typeof( ICommand ), typeof( EventToCommandCore ), null );
public static readonly DependencyProperty InvokeParameterProperty =
DependencyProperty.Register( "InvokeParameter", typeof( object ), typeof( EventToCommandCore ), null );
#endregion
#region Properties And Fields
public object InvokeParameter
{
get { return this.GetValue( InvokeParameterProperty ); }
set { this.SetValue( InvokeParameterProperty, value ); }
}
public ICommand Command
{
get { return (ICommand)this.GetValue( CommandProperty ); }
set { this.SetValue( CommandProperty, value ); }
}
public string CommandName{get; set;}
public object CommandParameter
{
get { return this.GetValue( CommandParameterProperty ); }
set { this.SetValue( CommandParameterProperty, value ); }
}
#endregion
#region methods
protected override void Invoke( object parameter )
{
this.InvokeParameter = parameter;
if ( this.AssociatedObject != null )
{
ICommand Command = this.ResolveCommand();
if ( Command != null && Command.CanExecute( this.CommandParameter ) )
{
Command.Execute( this.CommandParameter );
}
}
}
private ICommand ResolveCommand()
{
ICommand command = null;
if ( this.Command != null )
{
return this.Command;
}
var frmElement = (FrameworkElement)this.AssociatedObject;
if ( frmElement != null )
{
object dtContext = frmElement.DataContext;
if ( dtContext != null )
{
PropertyInfo cmdPropertyInfo = dtContext.GetType().GetProperties( BindingFlags.Public | BindingFlags.Instance ).
FirstOrDefault(
c =>
typeof( ICommand ).IsAssignableFrom( c.PropertyType ) &&
string.Equals( c.Name, this.CommandName, StringComparison.Ordinal )
);
if ( cmdPropertyInfo != null )
{
command = (ICommand)cmdPropertyInfo.GetValue( dtContext, null );
}
}
}
return command;
}
#endregion
}
}
Das ganze kann dann folgendermaßen verwendet werden
<UserControl x:Class="DemoApp"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cmd="clr-namespace:EventToCommand"
xmlns:VM="clr-namespace:DemoApp.ViewModel"
>
<UserControl.Resources>
<VM:DemoAppViewModel x:Key="DAVM" />
</UserControl.Resources>
<StackPanel x:Name="LayoutRoot" Background="White" DataContext="{StaticResource DAVM}">
<sdk:DatePicker Name="DatePickerControl"
Margin="5"
SelectedDateFormat="Short"
IsDropDownOpen="False"
SelectedDate="{Binding Path=DatePickerProperty, Mode=TwoWay}"
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectedDateChanged">
<cmd:EventToCommandCore Command="{Binding Path=SelectionChangedCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=InvokeParameter}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</sdk:DatePicker>
</StackPanel>
Im ViewModel könnte es dann Folgendermaßen aussehen:
(Nur Methoden definition)
private void SelectionChangedExecute( object state )
{
if ( state is SelectionChangedEventArgs )
{
//Do Some Stuff
}
}
Wie gesagt ich habe keine Ahnung wofür man das brauchen sollte...
Schlagwörter: Event, Command, Silverlight
Hallo,
Also ich würde das Folgendermaßen lösen
ein ChildWindow erstellen, dessen CodeBehind erweitern
public DetailsChildWindow(IDetailsChildWindow ViewModel)
{
InitializeComponents();
this.Loaded += (s,e) =>
{
this.DataContext = ViewModel
};
}
dann ein passendes ViewModel erstellen
public Class DetailsChildWindowViewModel : IDetailsChildWindow
{
public DetailsChildWindowViewModel(object SelectedItem)
{
//Aktionen ausführen um Details des Items anzuzeigen
}
}
und um auf das DoppelClick reagieren zu können bietet sich ein EventsToCommand an auf dass du dann reagieren kannst.
Aber Vielleicht würde eine Master/Detail Ansicht dir ja genügen
Hallo,
ich weiss nocht ob du es noch brauchst aber ich bin grade hierrüber gestolpert
Vielleicht kannst du es ja gebrauchen
Hallo,
Füge beim SelectedItem ein Mode=TwoWay hinzu
Du hast dir das mit den Konvertern wohl nicht angesehen oder die anderen posts zu gemühte geführt...
Halte dein model einfach
// Meine Variablen
public bool Activated = false;
public bool Launched = false;
public bool OnNavigated = false;
// Meine Brushes
private Brush GreenBrush = new SolidColorBrush(Color.FromArgb(255, 26, 150, 26));
private Brush RedBrush = new SolidColorBrush(Color.FromArgb(255, 167, 6, 6));
In deinem ViewModel muss die logik sein (INotifyPropertyChanged Implementieren)
public Brush BackgroundBrush
{
get{ return BrushState ? Model.GreenBrush : Model.RedBrush; }
}
private bool _BrushState;
public bool BrushState
{
get {return _BrushState;}
set{ _BrushState = value; RaisePropertyChanged("BackgroundBrush");}
}
In deiner View bindest du nun die Bool-Property an z.b. eine ComboBox (IsChecked)
und die Brush-Property an deinen Hintergrund!
Wenn du nun auch von verscheidenen Seiten auf diese BoolVariable zugreifen musst oder den Brush zugreifen musst dann verwende (ich weiss nicht der Beste weg) eine Static Property und lagere diese in eine BasisKlasse aus (am besten die Bool-Property).
in dem Nächsten VM könntest du dann folgendes machen
public SecondViewModel()
{
RefreshProperty();
}
private void RefreshProperty()
{
RaisePropertyChanged("BackgroundBrush");
}
Also ich denke mal dass es hiermit was zu tun hat
<ItemsControl ItemsSource="{Binding Path=Pages}" ItemTemplate="{StaticResource wizardStepTemplate}" Width="300"/>
Versuch das ItemsPanel anzupassen:
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" VerticalAlignment="Top" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
Also wenn die Farbe nur durch den State beeinflusst werden soll dann deklariere in der ViewModelBase Klasse eine Property vom Typ Bool.
Binde diese Property an die Background-Property des Steuerelemntes und gib noch zusätzlich einen Converter an (IValueConverter als Stichwort, findeste genug im Internet)
Natürlich in der BaseClass nicht das INotifyPropertyChanged vergessen sonst bekommt die View die Änderung der Property nicht mit
Um die Usability zu steigern hab ich allerdings vor Seite für Seite in meiner App gleich aussehen zu lassen, da wären "globale" klassen stark vom Vorteil.
verstehe ich nicht ganz. mit der Style Klasse kannst du doch mit jeder View auf die Styles zugreifen oder geht es dir darum diese auch Sofort im Designer zu sehen?
Wenn ja dann definiere die Styles im selben Projekt
Also deine Variablen sind vom Typ Bool und du würdest gerne ein Brush daraus
erzeugen? da fällt mir direkt das Stichwort Converter ein (genauer IConverter)
oder willst du einfach nur den aktuellen Farbwert bzw den Brush an die nächste seite übergeben?
Ganz klar wird mir die Notation hier nicht,
Source="/MyClassLib.Styles;component/Styles.xaml"
Was ist nun die MyClassLib? Und warum darauf die Referenz?
Die Styles befinden isch aber in der Styles.xaml, oder?
MyClassLib.Styles ist der Name des Projektes. Das "MyClassLib.Styles;component" gibt an dass sich die Datei innerhalb einer anderen Assembly befindet. ohen das wird innerhalb der eigenen Assembly gesucht und logischerweise nichts gefunden
Bevor man die Styles auslagert kann man sie auch direkt in den Resourcen der View definieren. Der Designer würde den Style immer anzeigen Ohne kompilieren zu müssen
Ich habe ein neues Projekt erstellt (ClassLibrary)
Danach ein ResourceDictionary angelegt (Styles.xaml)
In der View habe ich dann folgendes als Resource definiert:
<UserControl.Resources>
<ResourceDictionary x:Key="CustomStyles">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/MyClassLib.Styles;component/Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
Natürlich den Verweis auf die ClassLib nicht vergessen
Das wär mein erster Ansatz gewesen, aber das geht ja nicht.
Und was geht nicht?
Ich habe selber ein Silverlight Projekt in dem alle Styles in ein eigenes Projekt
ausgelagert worden sind. Im Designer sehe ich den Style dann zwar nicht aber zur Laufzeit
Wenn du mehr wissen willst dann guckst du hier (Behandelt in erster linie zwar das Framework Prism aber dort wird auch gezeigt und erklärt wieso Klassen Interfaces verwenden sollten)
prism--silverlight-part-1-taking-sketched-code-towards-unity
leider english aber es lohnt sich!
Ich kann dir Dieses WebCast empfehlen
Ist zwar Silverlight aber in WPF ist es das gleiche Prinzip
Meiner Meinung nach (Muss nicht Richtig sein) sollte jede View ihr eigenes ViewModel
haben.
Wenn die Kommunikation zwischen den VMs erforderlich ist dann solltest du dir mal
Prism anschauen oder falls das Over Kill ist mit Statischen Events (oder Properties in
der BasisKlasse) arbeiten
wie gesagt:
Meine Meinung (muss nicht Richtig sein!)
Ich würde mal behaupten dass die Ausrichtung vom Grid aus kommt
Versuch doch mal die RowDefinitions in ColumnDefinitons zu ändern und dort wo es verwendet wird auch (also aus Grid.Row="X" --> Grid.Column="X")
Zu winSharp93 Beitrag ergänze ich noch folgendes Stichwort
EventToCommand
Das DataGrid hat eine Property "AutoGenerateColumns" die du auf True setzen kannst.
Hier hast du eine gute Erklärung inklusive einem Beispiel
FindWindow
Und die Doku liefert auch einiges (ClassName = ProzessName)
Ich glaube das Problem ist hier nicht das Binden an die ListBox sondern eher sowas wie eine Master/Detail ansicht zu realisieren
Hier sind einige Links
Silverlight Business Apps
Create Silverlight Master
<Setter Property="Button.BorderBrush"> <SolidColorBrush Color="#ffbd69"/> </Setter>
Nur zur ergänzung:
<Setter Property="Button.BorderBrush">
<Setter.Value>
<SolidColorBrush Color="#ffbd69"/>
</Setter.Value>
</Setter>
Hallo,
Versuchst du herauszufinden welche Dateierweiterung mit welchem Programm geöffnet wird? Wenn Ja dann versuch mal fogendes
System File Association
Hallo,
im output Fenster rechtsklicken. rest erklärt sich von selbst
Hallo,
In der MSDN findest du genug Informationen:
XML-Dokumente und XML-Daten
Hallo,
ich habe das nicht selber ausprobiert aber vielleicht hilft es dir ja weiter
Add Drag-and-Drop Magic to Your Web Pages Using Microsoft AJAX Library