Auf meinem Resources.xaml (Resource Dictionary) Ich habe eine Datatemplate:TextBox mit Datenbindung ist nicht Wert zu aktualisieren, wenn Eigenschaft
<DataTemplate x:Key="ProductDetailsContentTemplate">
<StackPanel Orientation="Vertical" >
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25*"/>
<ColumnDefinition Width="50*"/>
<ColumnDefinition Width="25*"/>
</Grid.ColumnDefinitions>
<Button x:Name="SubtractQytyButton" Grid.Column="0" Content="-" FontSize="24" HorizontalAlignment="Stretch" Command="{Binding SubtractQuantityCommand}"
Margin="5,0" Style="{StaticResource ButtonStyle}" FontWeight="ExtraBold" />
<TextBox x:Name="QuantityTextBox" Grid.Column="1" HorizontalAlignment="Stretch" FontSize="24" Margin="5,0"
KeyDown="Quantity_Keydown" TextChanging="Quantity_TextChanging" TextChanged="QuantityTextBox_TextChanged"
Text="{Binding QuantityT, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" MaxLength="5" TextAlignment="Center"/>
<Button x:Name="AddQytyButton" Grid.Column="2" Content="+" FontSize="24" HorizontalAlignment="Stretch" Command="{Binding AddQuantityCommand}" />
</Grid>
</StackPanel>
und auf meinem Seite1 nenne ich Datatemplate auf ein Content
auf meinem page1VM, gibt es eine vererbte Klasse, die Eigenschaften enthalten:
public class Class1 : BindableBase
{
private Model _model;
public Class1(Model model) {
_model = model;
_quantityT = model.Quantity.ToString();
SubtractQuantityCommand = new DelegateCommand(SubtractQuantity, CanSubtract);
AddQuantityCommand = new DelegateCommand(AddQuantity, CanAdd);
}
public DelegateCommand SubtractQuantityCommand { get; }
public DelegateCommand AddQuantityCommand { get; }
private bool CanAdd() {
return int.Parse(QuantityT) < 99999;
}
private void AddQuantity() {
QuantityT = (int.Parse(QuantityT) + 1).ToString();
}
private bool CanSubtract() {
return int.Parse(QuantityT) > 0;
}
private void SubtractQuantity() {
QuantityT = (int.Parse(QuantityT) - 1).ToString();
}
private void InvalidateCommands() {
(AddQuantityCommand as DelegateCommand)?.RaiseCanExecuteChanged();
(SubtractQuantityCommand as DelegateCommand)?.RaiseCanExecuteChanged();
}
private string _quantityT;
public string QuantityT {
get { return _quantityT; }
set { this.Set(ref _quantityT, value);
InvalidateCommands();
}
}
}
mein BindableBase:
public abstract class BindableBase : IBindable
{
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged([CallerMemberName]string propertyName = null)
{
if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
return;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
protected virtual bool Set<T>(ref T storage, T value, [CallerMemberName]string propertyName = null)
{
if (object.Equals(storage, value))
return false;
storage = value;
RaisePropertyChanged(propertyName);
return true;
}
}
Mein Problem ist, beispielsweise der QuantityT Wert 1 ist, wenn ich die Minus- oder Plus-Taste klicken, wird die QuantityT Eigenschaft auf 0 oder 2 ist, aber es ist nicht die Aktualisierung der Textbox Wert eingestellt ist, seine noch 1 Anzeige, auch habe ich
UpdateSourceTrigger=PropertyChanged
Danke,
NicoTing
Ok ich werde versuchen, INotifyPropertyChanged hinzuzufügen, kann aber ich weiß, was meinst du es zurück „SetQuantityT "oder" GetQu antityT "? – NicoTing
btw Hinzufügen von INotifyPropertyChanged hat mein Problem nicht gelöst – NicoTing
ok. Ich weiß es nicht genau, aber soweit ich mich erinnere, gibt [StringMerkName] string propertyName nicht nur den Namen der Eigenschaft zurück. Es gibt etwas wie "Set/GetQuantityT" zurück. Vielleicht ist es jetzt anders, aber du solltest es versuchen. –