Ja, ist es.
@ThomasE. - Hat keinen Unterschied gemacht.
Grüße
Nicht richtig heißt das diese Property mir angezeigt wird :
<TextBox Grid.Column="1"
IsReadOnly="True"
HorizontalContentAlignment="Center" VerticalContentAlignment="Center"
Opacity="0.5"
Text="{Binding MaterialPreparationOfProtocols.ComboBoxMaterialPreparationProtocolsClinicStaffSelectedItem.DateOfTraining, Mode=OneWay, StringFormat=dd.MM.yyyy, UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource BaseTextBox}"/>
Mir aber mein SelectedItem in meiner ComboBox nicht ausgewählt wird.
Das Item entspricht meinem ObjectModel
Hallo,
public List<ClinicModel> ComboBoxMaterialPreparationProtocolsClinicItemsSource
{
get
{
return _ComboBoxMaterialPreparationProtocolsClinicItemsSource;
}
}
public ClinicModel ComboBoxMaterialPreparationProtocolsClinicSelectedItem
{
get { return Item.Clinic != null ? Item.Clinic : null; }
set
{
Item.Clinic = value;
Raise(nameof(ComboBoxMaterialPreparationProtocolsClinicSelectedItem));
Raise(nameof(LabelMaterialPreparationProtocolsAdditionalRequirementContent));
}
}
public ICommand ComboBoxMaterialPreparationProtocolsClinicSelectionChangedCommand { get; }
public List<ClinicStaffModel> ComboBoxMaterialPreparationProtocolsClinicStaffItemsSource
{
get { return _ComboBoxMaterialPreparationProtocolsClinicStaffItemsSource; }
set
{
_ComboBoxMaterialPreparationProtocolsClinicStaffItemsSource = value;
Raise(nameof(ComboBoxMaterialPreparationProtocolsClinicStaffItemsSource));
Raise(nameof(ComboBoxMaterialPreparationProtocolsClinicStaffSelectedItem));
}
}
public ClinicStaffModel ComboBoxMaterialPreparationProtocolsClinicStaffSelectedItem
{
get { return Item.ClinicStaff != null ? Item.ClinicStaff : null; }
set
{
Item.ClinicStaff = value;
Raise(nameof(ComboBoxMaterialPreparationProtocolsClinicStaffSelectedItem));
Raise(nameof(TextBoxMaterialPreparationProtocolsTimeShiftText));
}
}
Ich hab aktuell das Problem beim Laden meiner Eigenschaften das meine ClinicStaffItemsSource befüllt wurde, aber mein SelectedItem nicht richtig ausgewählt oder angezeigt wird.
Hallo zusammen,
ich hab aktuell das Problem das manche SelectedItems nicht gesetzt werden, weil anscheinend die ItemsSource zu spät geladen wird, wie kann ich denn am besten die Daten laden bevor der DataContext gesetzt wurde?
Grüße
Okay habs hinbekommen, die Idee mit dem Focus hatte ich auch schon, aber irgendwie hatte ich das nicht weiterverfolgt .. der Denkanstoß hat mir geholfen Danke!
Lösung :
Zusätzliche Klasse für das Focus Event
/// <summary>
/// Solution of this Class
/// https://stackoverflow.com/questions/1356045/set-focus-on-textbox-in-wpf-from-view-model-c
/// </summary>
public static class FocusBehavior
{
#region Dependency Properties
public static readonly DependencyProperty IsFocusedProperty =
DependencyProperty.RegisterAttached("IsFocused",
typeof(bool?),
typeof(FocusBehavior),
new FrameworkPropertyMetadata(IsFocusedChanged){ BindsTwoWayByDefault = true });
#endregion
#region Private Methods
private static void IsFocusedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var fe = (FrameworkElement)d;
if (e.OldValue == null)
{
fe.GotFocus += FrameworkElement_GotFocus;
fe.LostFocus += FrameworkElement_LostFocus;
}
if (!fe.IsVisible)
{
fe.IsVisibleChanged += new DependencyPropertyChangedEventHandler(fe_IsVisibleChanged);
}
if ((bool)e.NewValue)
{
fe.Focus();
}
}
private static void fe_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
var fe = (FrameworkElement)sender;
if (fe.IsVisible && (bool)((FrameworkElement)sender).GetValue(IsFocusedProperty))
{
fe.IsVisibleChanged -= fe_IsVisibleChanged;
fe.Focus();
}
}
private static void FrameworkElement_GotFocus(object sender, RoutedEventArgs e)
{
((FrameworkElement)sender).SetValue(IsFocusedProperty, true);
}
private static void FrameworkElement_LostFocus(object sender, RoutedEventArgs e)
{
((FrameworkElement)sender).SetValue(IsFocusedProperty, false);
}
#endregion
#region Public Methods
#region Get
public static bool? GetIsFocused(DependencyObject element)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
return (bool?)element.GetValue(IsFocusedProperty);
}
#endregion
#region Set
public static void SetIsFocused(DependencyObject element, bool? value)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
element.SetValue(IsFocusedProperty, value);
}
#endregion
#endregion
}
MVVM :
public string TextBoxMaterialPreparationProtcolsWeightText
{
get
{
if (TextBoxMaterialPreparartionProtocolsWeightIsFocused)
{
return Item.Weight.ToString();
} else { return Item.Weight + "g"; }
}
set
{
// Regex
Regex Regex = new Regex("^*[0-9]$");
if (Regex.IsMatch(value.ToString()))
{
Item.Weight = value != null ? Convert.ToInt32(value) : (int?)null;
}
else
{
if (String.IsNullOrEmpty(value)) { Item.TimeShift = null; }
}
Raise(nameof(TextBoxMaterialPreparationProtcolsWeightText));
}
}
public bool TextBoxMaterialPreparartionProtocolsWeightIsFocused
{
get { return _TextBoxMaterialPreparartionProtocolsWeightIsFocused; }
set
{
_TextBoxMaterialPreparartionProtocolsWeightIsFocused = value;
Raise(nameof(TextBoxMaterialPreparartionProtocolsWeightIsFocused));
Raise(nameof(TextBoxMaterialPreparationProtcolsWeightText));
}
}
XAML :
<TextBox Grid.Column="1"
HorizontalContentAlignment="Center" VerticalContentAlignment="Center"
MaxLength="9"
mah:TextBoxHelper.ClearTextButton="False"
FocusBehavior:FocusBehavior.IsFocused="{Binding MaterialPreparationOfProtocols.TextBoxMaterialPreparartionProtocolsWeightIsFocused, UpdateSourceTrigger=PropertyChanged}"
Text="{Binding MaterialPreparationOfProtocols.TextBoxMaterialPreparationProtcolsWeightText, UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource BaseTextBox}"/>
Grüße
Hast du denn ein Beispiel für die Trigger?
An und für sich klingt das ja gut, klappt nur aktuell nicht so einfach.
<Trigger Property="IsFocused" Value="True">
<Setter Property="Text" Value="{Binding MaterialPreparationOfProtocols.Item.LastnameOfChildren, UpdateSourceTrigger=PropertyChanged}"/>
</Trigger>
<Trigger Property="IsFocused" Value="False">
<Setter Property="Text" Value="{Binding MaterialPreparationOfProtocols.Item.LastnameOfChildren, StringFormat={}{0}g, UpdateSourceTrigger=PropertyChanged}"/>
</Trigger>
für nummerische Werte wäre natürlich ein anderes Control besser.
Das soll die Eingabe gar nicht erkennen ich will einfach nur hinter der Eingabe die Einheit stehen haben, die geb ich dem Control auch gerne mit, wenn es das dann kann.
Ich finde aktuell nichts.
Grüße
Hallo zusammen,
ich hätte gerne die Maßeinheit (g, Kg etc.) direkt in (Beispielsweise : TextBox, NumericUpDown)
dem jeweiligen Control hinter dem Inhalt drin.
Das sobald etwas eingegeben wurde immer die entsprechend hintrelegte Einheit dahinter angezeigt wird.
Hat damit jemand Erfahrung oder eine Lösung parat?
Grüße
Sollte auch kein persönlicher Angriff sein und der Verweis darauf ist wie bereits erwähnt auch nicht verkehrt, allerdings beantwortet das seine Frage überhaupt nicht.
Grüße
Hey Uff,
solche Antworten wie von Taipi88 hasse ich persönlich.
Ich kenne das, man versucht es ewig alleine, hat schon gegoogled und wendet sich dann hoffnungsvoll an ein Forum, um dort zu hören man sollte es anders machen.
Allerdings muss man in dem Fall sagen, er hat recht.
Du solltest wirklich auf das MVVM Pattern sowie auf DataBindings setzen, das macht die Sache wesentlich leichter und auch angenehmer damit zu arbeiten.
Ansonsten zu deiner Frage :
Theoretisch sollte LISTE1.SelectedItem != null dir sagen ob bereits ein Element ausgewählt wurde.
Grüße
Beitrag schon ein wenig älter.
Tatsächlich gerade am selben Punkt stehen geblieben.
Die AutoCompleteBox von WpfToolkit brauch die TwoWay Bindung, scheint nicht voreingestellt zu sein.
Hat jemand schon mal geschafft für dieses Element ein Watermark zu setzen?
Krieg ich aktuell nicht hin, gibts dort irgendwas? Habs mal den TextBoxHelper von MahApps versucht, der hat dort leider nichts anzeigen könnten.
Grüße
Servus,
bin gerade auf das selbe Problem gestoßen, der Kollege vor mir steuert aus dem MainWindow mit einer ContentControl UserControl's an, allerdings wie krieg ich denn ein UserControl wieder geschlossen um mir quasi im MainWindow den Rückgabewert zu holen um das dann weiterzuverarbeiten?
Grüße
Danke 🙂!
Irgendwie wird mein SelectedItem immer auf Null gesetzt sobald ich die Combobox verlasse (Befindet sich in einem DataGrid CellEditTemplate) muss ich da noch irgendwas ergänzen als nur die DependencyProperty?
Edit : Geht jetzt weiß aber nicht warum, hab so viel geändert .. hab den Überblick verloren 🙄
Danke der Tipp hat schon mal geholfen für den Einstieg.
Wird langsam.
Hab mir jetzt erstmal ein eigenes UserControl gemacht, aber leichter wäre es doch irgendwie, wenn ich ein UserControl vom Typ ComboBox hätte wo ich nur das ControlTemplate erweiter, aber die Eigenschaften wie ItemsSource etc. beibehalten werden.
Geht das?
Hallo zusammen,
hat jemand so etwas schon einmal gebastelt?
Ich google jetzt schon seit gestern und bin noch zu keinem zufriedenstellendem Ergebnis gekommen.
Eventuell kann ja jemand weiterhelfen.
Edit : Es geht quasi um einen Clear Button am Ende der Liste
Grüße
Ich weiß nicht wie das geht 😕 Bzw. wäre das ja auch vielleicht die Antwort auf meine Frage
Hallo,
danke für die schnelle Antwort.
Ja, ich drück mich irgendwie immer zu Smart aus.
Telerik hat ein Steuerelement mit dem ich Probleme hab (RadRibbonGroup) also hab ich mir das einfach umgebastelt und wollte aber den exakten Farbton beibehalten. Dort ist aber ein Farbverlauf hinterlegt.
Grüße
Hallo zusammen,
ich würde mir gerne von einem Telerik Steuerelement den Farbverlauf auslesen lassen, ist das überhaupt möglich?
Grüße
Servus p!lle,
sorry für die späte Rückmeldung meinerseits.
Ich hab es gerade mal mit der MaskedTextBox versucht und dort klappt es aktuell bei mir auch nicht.
Das Grid_Visibility hab ich mal weggelassen.
<Grid Visibility="{Binding ElementName=ListBox, Path=SelectedIndex, Converter={StaticResource IntEqualsParameterToVisible}, ConverterParameter=1}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25" />
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="25" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="35"/>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<xctk:MaskedTextBox Grid.Column="1" Grid.Row="1"
Margin="3"
VerticalContentAlignment="Center" HorizontalContentAlignment="Center"
Text="{Binding RadRibbonGroupFilterTrunkIDFromText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Mask="00\.00\.00\.00\.\0"
MinWidth="100"
TabIndex="1"/>
<Label Grid.Column="2" Grid.Row="1"
Content=" - "
VerticalContentAlignment="Center" HorizontalContentAlignment="Center"/>
<xctk:MaskedTextBox Grid.Column="3" Grid.Row="1"
Margin="3"
VerticalContentAlignment="Center" HorizontalContentAlignment="Center"
Text="{Binding RadRibbonGroupFilterTrunkIDToText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Mask="00\.00\.00\.00\.\0"
MinWidth="100"
TabIndex="2"/>
</Grid>
Edit Grid befindet sich in einer RadRibbonGroup. Macht das vielleicht den Unterschied? (Telerik)
Moin zusammen,
ich hab es mit einer Standard TextBox nicht ausprobiert, weil ein RadMaskedTextInput vorgegeben ist.
Ich denke das Grid unterbindet es.
Seruvs p!lle,
ich setz sie oben für das Grid.
Danke dir! 😃
Brachte nicht den gewünschten Erfolg 😕.
Hallo zusammen,
ich hab aktuell das Problem, das ich einige Elemente ein und ausblende für diese aber gerne einen TabIndex hätte wenn diese Visible sind. Bisher hat noch nichts funktioniert und eben bin ich auch darauf gestoßen.
Controls that cannot get the focus, as well as disabled and invisible controls, do not have a TabIndex property and are not included in the tab order. As a user presses the TAB key, these controls are skipped.
Hat jemand damit schon Erfahrung gesammelt? Kann mir irgendwie nicht vorstellen das es gar nicht funktioniert.
<ressourcen:Grid_Visibility
Style="{StaticResource Visibility_Effect_Grid}"
Visibility_Effect="{Binding Visibility}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="15" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="25" />
</Grid.ColumnDefinitions>
<telerik:RadMaskedTextInput Grid.Column="1"
Margin="3"
VerticalContentAlignment="Center"
HorizontalContentAlignment="Center"
VerticalAlignment="Center"
Mask="dd.dd.dd.dd.d"
FontSize="12"
Width="Auto"
Value="{Binding Von, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
KeyboardNavigation.TabIndex="1" />
<telerik:RadMaskedTextInput Grid.Column="3"
Margin="3"
VerticalContentAlignment="Center"
HorizontalContentAlignment="Center"
VerticalAlignment="Center"
Mask="dd.dd.dd.dd.d"
FontSize="12"
Width="Auto"
Value="{Binding Bis, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
KeyboardNavigation.TabIndex="2" />
</Grid>
</ressourcen:Grid_Visibility>
Ich probier es mal dort auch noch .. danke 😃
Hat keiner damit Erfahrung oder arbeitet selber mit Telerik?
Oder fehlen noch irgendwelche Informationen von mir.
Grüße
Hallo zusammen,
ich hab folgendes Problem, ich habe ein telerik:RadGridView und habe dort in einer Spalte einen Button, für diesen möchte ich über einen DataTrigger via Style den IsEnabled Status verändern, nur sobald ich den Style setze ändert das Steuerelement seine Größe von alleine, wenn ich dieses dann über einzelne Eigenschaften anpasse komm ich trotzdem nicht mehr zum ursprünglichen Ergebnis zurück, hat jemand vielleicht eine Idee woran das liegen könnte?
<telerik:RadGridView Grid.Row="1"
AutoGenerateColumns="False"
IsFilteringAllowed="False" CanUserResizeColumns="False" ShowGroupPanel="False"
RowIndicatorVisibility="Collapsed"
SelectionMode="Single" SelectionUnit="FullRow"
telerik:StyleManager.Theme="Windows8Touch"
ItemsSource="{Binding Rückstellproben_RadGridView}"
SelectedItem="{Binding Rückstellproben_RadGridView_SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
<telerik:GridViewDataColumn
Header="Freigabe"
HeaderTextAlignment="Center"
MinWidth="120">
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<telerik:RadButton Content="Bestätigen"
IsEnabled="False"
Margin="3, 0, 3, 0"/>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
<telerik:GridViewDataColumn.CellEditTemplate>
<DataTemplate>
<!--<Button Content="Bestätigen"
Margin="3, 0, 3, 0"
Height="22"
FontSize="10" VerticalContentAlignment="Center">
</Button>-->
<telerik:RadButton Content="Bestätigen"
x:Name="rb_Stellplatzfreigabe_der_dritten_Rückstellprobe"
Margin="3, 0, 3, 0">
<telerik:RadButton.Style>
<Style TargetType="telerik:RadButton">
<Style.Setters>
<Setter Property="Content" Value="Test"/>
<Setter Property="Opacity" Value="0.5" />
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="FontSize" Value="10"/>
<Setter Property="Height" Value="25"/>
</Style.Setters>
<!--<Setter Property="Height" Value="22" />
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="FontSize" Value="12" />-->
</Style>
</telerik:RadButton.Style>
</telerik:RadButton>
</DataTemplate>
</telerik:GridViewDataColumn.CellEditTemplate>
</telerik:GridViewDataColumn>
</>
Nicht wundern ich hab schon einiges versucht, deswegen sieht das ein wenig unübersichtlich an der Stelle aus.
Auf dem Bild :
Links Default - Rechts mit dem Style Trigger
Unten wie es aussieht wenn ich versuche es anzupassen.
Grüße
Ging leider nicht, obwohl es im anderen bereits implementiert war. 🤔
Oder bring ich da wieder etwas durcheinander?
Brauch das neue ViewModel auch nochmal ein INotifyPropertyChanged?
Edit : Jup, dachte es reicht wenn es vom ersten erbt.
Er zeigt mir jetzt zwar schön meine Änderungen im RadGridView an, allerdings wenn ich vom Code aus etwas im ViewModel setze wird irgendwie kein PropertyChanged Event ausgelöst, er springt irgendwie gar nicht erst in den Set Bereich ..
ViewModel Extraröhrchen
private ObservableCollection<ViewModel_Extraröhrchen_RadGridView> _Extraröhrchen_RadGridView;
private ViewModel_Extraröhrchen_RadGridView _Extraröhrchen_RadGridView_SelectedItem;
public ObservableCollection<ViewModel_Extraröhrchen_RadGridView> Extraröhrchen_RadGridView { get { return _Extraröhrchen_RadGridView; } set { _Extraröhrchen_RadGridView = value; OnPropertyChanged("Extraröhrchen_RadGridView"); } }
public ViewModel_Extraröhrchen_RadGridView Extraröhrchen_RadGridView_SelectedItem { get { return _Extraröhrchen_RadGridView_SelectedItem; } set { _Extraröhrchen_RadGridView_SelectedItem = value; OnPropertyChanged("Extraröhrchen_RadGridView_SelectedItem"); } }
ViewModel_Extraröhrchen_RadGridView
public List<Vita34.Data.VitaLab.Database.TNK_TANK> Extraröhrchen_RadGridView_TANK { get { return _Extraröhrchen_RadGridView_TANK; } set {_Extraröhrchen_RadGridView_TANK = value; } }
public int Extraröhrchen_RadGridView_TANK_SelectedIndex { get { return _Extraröhrchen_RadGridView_TANK_SelectedIndex; } set { _Extraröhrchen_RadGridView_TANK_SelectedIndex = value; OnPropertyChanged("Extraröhrchen_RadGridView_TANK_SelectedIndex"); } }
public string Extraröhrchen_RadGridView_TANK_NAME { get { return _Extraröhrchen_RadGridView_TANK_NAME; } set { _Extraröhrchen_RadGridView_TANK_NAME = value; OnPropertyChanged("Extraröhrchen_RadGridView_TANK_NAME"); } }
Window
ViewModel.Extraröhrchen_RadGridView_SelectedItem.Extraröhrchen_RadGridView_TANK = Vita34.Data.VitaLab.Helper.Get.DropDownTanks("E");
XAML
<telerik:GridViewDataColumn.CellEditTemplate>
<DataTemplate>
<ComboBox Margin="3"
VerticalContentAlignment="Center" HorizontalContentAlignment="Center"
ItemsSource="{Binding Extraröhrchen_RadGridView_TANK}"
DisplayMemberPath="TANK_NAME"
SelectedIndex="{Binding Extraröhrchen_RadGridView_SelectedItem.Extraröhrchen_RadGridView_TANK_SelectedIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</telerik:GridViewDataColumn.CellEditTemplate>
Liegt es daran das ich im SelectedItem die Werte befülle und er dann irgendwie den Bezug verliert? Seltsamerweise lässt sich vom Code aus die Datenquelle befüllen, was er auch richtig anzeigt.
Yei ich habs 😁
So war es wohl auch nicht gemeint .. 🙁
Datenquelle
public static List<View_Extraroehrchen> return_Extraröhrchen()
{
try
{
using (VitaLab3Entities VitaLab = new VitaLab3Entities())
{
var x = VitaLab.View_Extraroehrchens.ToList();
return x;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace.ToString());
}
return null;
}
ViewModel
private ObservableCollection<ViewModel_Extraröhrchen_Test> _Test;
public ObservableCollection<ViewModel_Extraröhrchen_Test> Test { get { return _Test;} set { _Test = value; OnPropertyChanged("Test"); } }
public class ViewModel_Extraröhrchen_Test
{
public string Format_Praeparat_ID { get; set; }
public DateTime? AUSGELAGERT_DATUM { get; set; }
}
Window
ViewModel.Test = new System.Collections.ObjectModel.ObservableCollection<Vita34.VitaLab.Windows.VitaLab.ViewModel.ViewModel_Extraröhrchen_Test>(Vita34.Data.VitaLab.VitaLab3.Sammellisten.Extraröhrchen.Extraröhrchen.Get.return_Extraröhrchen().Select(x => new VitaLab.ViewModel.ViewModel_Extraröhrchen_Test
{
Format_Praeparat_ID = x.Format_Praeparat_ID,
AUSGELAGERT_DATUM = x.AUSGELAGERT_DATUM
}
));
Schließt einfach den Thread das ist sinnlos 👍
Wir können nicht verstehen was da passiert. Offensichtlich kommt da eine ObservableCollection zurück. Aber was in dieser Methode passiert und wie deine Entities in diese ObservableCollection gelangen sehen wir nicht. Dort ist aber scheinbar ein möglicher Platz für dein Wrapping.
using (VitaLab3Entities VitaLab = new VitaLab3Entities())
{
var Extraröhrchen = VitaLab.View_Extraroehrchens.Where(x => x.ANNAHME_DATUM > AnnahmeDatum && x.ANNAHME_DATUM < AnnahmeDatumBis).OrderBy(x => x.ANNAHME_DATUM);
return new System.Collections.ObjectModel.ObservableCollection<View_Extraroehrchen>(Extraröhrchen);
}
Statt halt einfach die Entities in die Collection zu packen wrapst du sie halt vorher in einem ViewModel.
Also ich packe meine Entities in ein extra ViewModel und befülle meine ObservableCollection dann mit dem ViewModel oder wie?
Anhand deines Snippets sieht man halt recht wenig was du vor hast und wie bestimmte Dinge bei dir momentan umgesetzt sind. z.b. hab ich keine Ahnung wie du momentan überhaupt Daten bis zu deiner UI bringst.
Aber das ist doch eine Aussage mit der ich arbeiten kann.
mein aktuelles ViewModel :
public System.Collections.ObjectModel.ObservableCollection<View_Extraroehrchen> Extraröhrchen { get { return _Extraröhrchen; } set { _Extraröhrchen = value; OnPropertyChanged("Extraröhrchen"); } }
protected virtual void OnPropertyChanged(string PropertyName)
{
PropertyChanged.Invoke(this, new System.ComponentModel.PropertyChangedEventArgs(PropertyName));
}
meine Klasse :
this.DataContext = ViewModel;
ViewModel.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(OnPropertyChanged);
set_Default_Values();
Befüllung der Daten
ViewModel.Extraröhrchen = Vita34.Data.VitaLab.VitaLab3.Liste.Liste.Get.GetViewExtraroehrchen(
ViewModel.Extraröhrchen_Filterbereich_Tagesliste_Datum,
ViewModel.Extraröhrchen_Filterbereich_Tagesliste_Datum.AddDays(1)
);
Anbindung an die Oberfläche
<telerik:RadGridView AutoGenerateColumns="False"
IsFilteringAllowed="False" ShowGroupPanel="False"
RowIndicatorVisibility="Collapsed"
telerik:StyleManager.Theme="Windows8Touch"
ItemsSource="{Binding Extraröhrchen, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding Extraröhrchen_SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Bearbeitung der Daten
if (ViewModel.IsWorking == false)
{
if (ViewModel.Extraröhrchen_SelectedItem != null)
{
ViewModel.Extraröhrchen_SelectedItem.AUSGELAGERT_VON = ViewModel.Extraröhrchen_Bearbeiter;
}
}
Wirkt auch so 8o
Wenn mich jemand das nächste mal fragt warum sein Auto nicht funktioniert, sag ich ihm auch einfach reparier es 👍 Sollte ja auf anhieb wissen wie er es umzusetzen hat. :rtfm:
Naja mit den aktuellen Vorschlägen kam ich noch nicht wirklich weiter und irgendwie muss ich ja voran kommen ..
Und in was oder wie konvertiere ich ein DBSet?
Bist du dir überhaupt sicher dass das RadGridView dann auch die Änderungen bemerkt? Oder vermutest du das ganze einfach nur?
this.Dispatcher.BeginInvoke(new Action(() =>
{
this.Test.Rebind();
}
), System.Windows.Threading.DispatcherPriority.ApplicationIdle, null);
Immerhin mal etwas was funktioniert ..
Okay und wie bzw in was wrappe ich es dann am besten?
Hab ich doch? Ich hab ein ViewModel mit einer ObservableCollection die vom Typ View_Extraroehrchen ist, dieser Typ stammt aus der EntitiyFramework Klasse der dort definitiert ist.
Hat denn in dem Zusammenhang überhaupt schon mal jemand Erfahrung gesammelt? Scheint irgendwie nicht so.
Grüße
Ein Objekt aus der Datenbank.
public virtual DbSet<View_Extraroehrchen> View_Extraroehrchens { get; set; }
Aber wo soll ich das denn dort einfügen? Die Klasse von wo das Objekt kommt erbt bereits vom DBContext
Vielleicht kannst du mir mit einem Beispiel weiterhelfen?
Das kommt direkt aus der Datenbank (EntityFramework)
Hallo zusammen,
ich hab folgendes Problem :
ich versuche gerade eine ObservableCollection an ein RadGridView (Telerik) zu binden.
Wenn ich das SelectedItem ebenfalls an mein MVVM binde und dort Änderungen tätige, werden diese zwar in die Datenquelle übernommen, allerdings aktualisiert sich mein RadGridView nicht?
Kann mir jemand vielleicht helfen wo mein Fehler aktuell ist :
ViewModel
public System.Collections.ObjectModel.ObservableCollection<View_Extraroehrchen> Extraröhrchen { get { return _Extraröhrchen; } set { _Extraröhrchen = value; OnPropertyChanged("Extraröhrchen"); } }
protected virtual void OnPropertyChanged(string PropertyName)
{
PropertyChanged.Invoke(this, new System.ComponentModel.PropertyChangedEventArgs(PropertyName));
}
WPF
<telerik:RadGridView AutoGenerateColumns="False"
IsFilteringAllowed="False" ShowGroupPanel="False"
RowIndicatorVisibility="Collapsed"
telerik:StyleManager.Theme="Windows8Touch"
ItemsSource="{Binding Extraröhrchen, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding Extraröhrchen_SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<telerik:GridViewDataColumn DataMemberBinding="{Binding AUSGELAGERT_DATUM, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Header="Datum"
HeaderTextAlignment="Center"
MinWidth="80">
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding AUSGELAGERT_DATUM, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
<telerik:GridViewDataColumn.CellEditTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
<telerik:RadDatePicker Margin="3"
SelectedValue="{Binding DataContext.Extraröhrchen_Datum, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,
RelativeSource={RelativeSource AncestorType=telerik:RadGridView}}"/>
</Grid>
</DataTemplate>
</telerik:GridViewDataColumn.CellEditTemplate>
</telerik:GridViewDataColumn>
</telerik:RadGridView
Wie ich aktuell versuche das ganze zu ändern im Code :
if (ViewModel.Extraröhrchen_Auslagern == true)
{
// --- Datum --- //
ViewModel.Extraröhrchen_Datum = DateTime.Now;
ViewModel.Extraröhrchen_SelectedItem.AUSGELAGERT_DATUM = DateTime.Now;
//ViewModel.Extraröhrchen.Find(x => x.Praeparat_ID == ViewModel.Extraröhrchen_SelectedItem.Praeparat_ID).AUSGELAGERT_DATUM = DateTime.Now;
}
Die Daten werden offensichtlich korrekt übernommen, allerdings wird im RadGridView die Änderung erst angezeigt sobald ich in das Feld klicke und wieder ein anderes auswähle.
Grüße
Jup lag am struct, wusste ich nicht das es damit nicht geht, hab mir jetzt eine Klasse genommen damit funktioniert es.
Ich kann die Static Sachen nicht alle rauswerfen, das wäre aktuell einfach zu viel Aufwand, das muss ich nach und nach mal aufarbeiten.
Weil ich hier zuletzt schrieb das es am struct lag warum es mit der ObservableCollection nicht funktioniert hat und es mittlerweile funktioniert, des halb ist es Blödsinn.
Außerdem ist es jawohl Geschmackssache ob man Daten eher in einer Liste als einer DataTable verarbeitet.
Servus MrSparkle,
Hi _Cashisclay,
deinen letzten Kommentar verstehe ich nicht. Du hast doch gefragt, weil es nicht so funktioniert, wie es derzeit implementiert ist.
leider totaler Blödsinn ^^. Ich habe gefragt ob es so wie es aktuell implementiert es, die Möglichkeit besteht das ganze umzusetzen, was auch funktioniert, ich habe ja bereits den Lösungsquellcode gepostet.
Das Programm und auch die funktionsweise die ich mit dem aktuellen Stand umsetzen wollte funktioniert. Der Code ist funktionsfähig, ebenfalls testbar und auch lesbar, er mag zwar nicht so sein wie es sich gehört und das er neu geschrieben werden müsste, das möchte ich gar nicht abstreiten, aber ich hatte bereits geschrieben ich kann es nicht ändern.
Und um diesen Kommentar dir zu erklären -> Ich bin wie gesagt neu in der Firma, das Programm ist nicht klein, ich kann nicht einfach alles neu schreiben, das wäre ewig dauern .. ich muss nun mal damit erstmal arbeiten und das nach und nach anfassen.
Trotzdem danke für die Links, ich kenne allerdings das normale MVVM vorgehen, ich hätte auch nicht alles static deklariert bzw. hab ich das zuvor noch nie benutzt.
Grüße
Deswegen nutzt man ja auch kein static.
Ja, aber ich kann es doch jetzt auch nicht ändern 😁
Ich müsste jetzt tatsächlich lange nachdenken um mich zu erinnern, wann ich das letzte mal structs benutzt habe.
Ich kann mich wie unconnected nicht daran erinnern, wann ich das letzte mal bewusst strucs verwendet habe und static dazu (Consolen Main Methoden (static) und Datetimes (struct) ausgenommen 😉
Geht mir ähnlich static in dem Zusammenhang hab ich so auch nie benutzt, deswegen ist das ganze auch ein wenig umständlich gerade für mich. Struct war meine Idee, hatte das irgendwie im Hinterkopf und dachte, wozu gibts das Zeug, wenn ich es dafür nicht nutze, wusste aber nicht das es einfach überholt ist.
Kleiner, allgemeiner Tipp:
In den meisten Fällen ist ein OnPropertyChanged bei einer Property vom Typ "ObservableCollection" nicht notwendig. Es sei denn, die komplette Property wird neu gesetzt.
Das Hinzufügen oder Löschen von Einträgen in der OC wird bereits durch die OC selbst überwacht.
Gilt allerdings nicht für static, habs gerade nochmal probiert, aber ansonsten danke für die Info 😛
War mir aber zur ObservableCollection auch schon bekannt.
Ich persönlich kann damit auch nichts anfangen, würde so auch nicht schreiben, allerdings weiß ich auch nicht warum man das nicht machen sollte, also die Begründung .. ihr seid doch dort mehr bewandert, kann mich eventuell jemand aufklären?
Jup lag am struct, wusste ich nicht das es damit nicht geht, hab mir jetzt eine Klasse genommen damit funktioniert es.
Ich kann die Static Sachen nicht alle rauswerfen, das wäre aktuell einfach zu viel Aufwand, das muss ich nach und nach mal aufarbeiten.