在我Resources.xaml(資源詞典),我有一個DataTemplate:TextBox控件以及綁定並沒有更新值時更改屬性
<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>
,並在我的第一頁我稱之爲的DataTemplate的ContentControl中
在我page1VM,存在包含的屬性繼承的類:
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();
}
}
}
我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;
}
}
我的問題是,例如QuantityT值是1,當我點擊減號或加號按鈕時,QuantityT屬性設置爲0或2,但它沒有更新的文本框的值,它仍然顯示1,連我加
UpdateSourceTrigger=PropertyChanged
感謝,
NicoTing
好,我會嘗試添加INotifyPropertyChanged的,但我知道你是什麼意思它會返回「SetQuantityT 「或」GetQu antityT「? – NicoTing
順便說一句,添加INotifyPropertyChanged沒有解決我的問題 – NicoTing
好的。我不確定,但據我記得,[CallerMemberName]字符串propertyName不返回屬性名稱。它返回類似「Set/GetQuantityT」的內容。也許現在有所不同,但你應該試試看。 –