Problem ist mit Eigenschaft Init/Einstellung. Problem tritt in UserControl auf, das von der Basisklasse abgeleitet ist (in der are-Eigenschaften definiert sind). UserControl besteht aus einem Textfeld und einer Geschäftslogik, die in der Basisklasse definiert ist.WPF-Property-Set-Reihenfolge in benutzerdefinierten XAML und UserControl-Basisklasse
VariableName-Eigenschaft in Setter-Aufrufmethoden, die die VariableType-Eigenschaft aus derselben Basisklasse verwendet.
Problem tritt auf, wenn VariableName zuerst in XAML definiert ist. Ich muss sicherstellen, dass VariableType Wert vor VariableName erhält.
public Enums.Types VariableType
{
get
{
return _variableType;
}
set
{
_variableType = value;
if (!string.IsNullOrEmpty(_variableName) && Type == null)
SetType();
}
}
public string VariableName
{
get { return _variableName; }
set
{
_variableName = value;
if (!string.IsNullOrEmpty(_variableName) && Type == null)
SetType();
}
}
private void SetType()
{
if (Vars == null)
PopulateVars();
if (VariableType != Enums.Types.Default)
{
Type = Types.SetOveridenType(VariableType);
}
}
And XAML:
<Window
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:local="clr-namespace:TestShell"
xmlns:Controls="clr-namespace:Controls.Controls;assembly=Controls" x:Class="TestShell.MainWindow"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Controls:Numeric HorizontalAlignment="Left" Margin="186,37,0,0" VerticalAlignment="Top" Height="40" Width="111" VariableName="SomeName" VariableType="Int16"/>
</Grid>
Hallo, vielen Dank für die Antwort. Es ist so. VariableType ist eine Enumeration ohne NULL-Werte, und der Wert ist immer standardmäßig am Anfang. Typ auf der anderen Seite ist vom Typ Typ :). Benutzer des Steuerelements kann den Variablentyp über die Enumeration in der Entwurfszeit ändern, oder der Wert wird in Runtime dynamisch festgelegt. Problem ist, wenn VariableName vor enum VariableType gesetzt ist, denn dann habe ich falsche Default-Wert, zum Beispiel Int32. –
Wie auch immer, ich löste das, indem ich die Methode Typ eingab, die die Kontrolle initialisiert. Ich bin mir sicher, dass alle Requisiten initialisiert sind. –