mit IValueConverter mit den aktuellen DataContext-in zwei-Wege-Bindung
Habe ich Probleme mit einem Konverter ich benutze zur Konvertierung zwischen string und unsere timeformat. Der Konverter an sich funktioniert gut und ist implemeneted wie diese:
[ValueConversion(typeof(string), typeof(SimpleTime))]
public class StringToSimpleTimeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
//convert from string to SimpleTime and return it
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
//convert value from SimpleTime to string and return it
}
}
Den XAML-Code, der den Konverter verwendet, umfasst der Wandler selbst in das Benutzersteuerelement.Ressourcen wie diese:
<converter:StringToSimpleTimeConverter x:Key="stringToSimpleTimeConverter"/>
Wenn die Eigenschaft begegnet ist (ich bin mit dem datagrid aus dem wpf-toolkit im hintergrund) das datatemplate für die Bearbeitung der simpletime verwendet:
<DataTemplate x:Key="SimpleTimeEditingTemplate">
<TextBox Text="{Binding, Converter={StaticResource stringToSimpleTimeConverter}, Mode=TwoWay}"/>
</DataTemplate>
Dem problem bin ich begegnet, ist, dass der Konverter muss ein Pfad angegeben, der dann bindend, wenn Sie eine twoway-Konverter (und ich brauche es in beide Richtungen), aber die Eigenschaft, die ich einstellen will, ist bereits die aktuelle DataContext - Was-Pfad kann ich angeben, für das dann?
Die einzige Lösung die ich mir vorstellen könnte, ist die Einführung einer dummy-Eigenschaft in der SimpleTime, dass nur die aktuellen SimpleTime oder setzt es.
public class SimpleTime
{
...
public SimpleTime Clone
{
get { return new SimpleTime(_amount, _format); }
set { this._amount = value._amount; this._format = value._format; }
}
}
binden und dass man über
<TextBox Text="{Binding Clone, Converter={StaticResource stringToSimpleTimeConverter}, Mode=TwoWay}"/>
das funktioniert aber nicht wirklich eine geeignete Lösung, vor allem, wenn ich brauche Konverter für mehr mal...
jede Hilfe ist willkommen
cheers, manni
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, Sie können Problemumgehung es so
Statt der Einführung einer dummy-Eigenschaft in der Klasse, warum nicht erstellen Sie eine container-Klasse wie die folgenden:
und verwenden Sie es wie:
Diese nicht beschädigt/mutieren Ihre vorhandene Klasse und immer noch erlauben, Sie zu tun, was Sie tun möchten.
DataContext
einerControl
und binden Sie Sie mit{Binding}
ohne einen Pfad angeben. Wenn dies ist, was du tust, es ist falsch. Sollten SieDataContext
von einem übergeordneten Steuerelement und alle untergeordneten Steuerelemente ableiten. Und verwenden Sie nur Bindungen über verschiedene Wege in untergeordneten Steuerelemente.Ich weiß, es ist eine alte Frage, aber falls jemand stößt auf diese, korrekte Pfad wäre hier
Path=.