我有View及其ViewModel。在View中,我有一些Panels绑定到我的ViewModel中的一些属性;
例如,第一个属性是SomeObject
。在该面板中,我有一些文本框,它们绑定到SomeObject
类中的某些属性。 ViewModel和类中的所有绑定都实现INPC。
该面板中的文本框以SomeObject
类的方式绑定到其属性:SomeObject.Property
。
在该视图中,我有一个“保存”按钮。每当在文本框中输入内容或在面板中更改内容时,我都需要更改按钮的IsEnabled
属性。
我通过更改{Some}的setter中绑定到按钮的SomeObject
属性,仅在我的viewmodel中为IsEnabled
属性完成了它。但是,当我在SomeObject
的属性中更改某些内容时,它不会在ViewModel中调用main SomeObject
的setter,并且我无法从IsEnabled
更改SomeObject
属性类。
<controls:ExpandableSettingsPanel Header="REFUND" IsExpanded="{Binding RefundCustomerConfigurationEnabled, Mode=TwoWay}" ..>
<StackPanel..>
<CheckBox Content="Allowed within reversal period" IsChecked="{Binding RefundCustomerConfiguration.IsAllowedWithinReversalPeriod, Mode=TwoWay}"/>
<TextBlock Style="{DynamicResource GrayTextBlockStyle}" Text="Minimal amount to be refunded"/>
<WrapPanel>
<TextBlock Text="€" .. />
<controls:MementoTextBox Text="{Binding RefundCustomerConfiguration.MinimalAmountToBeRefunded, Mode=TwoWay,
NotifyOnValidationError=True, StringFormat=\{0:N2\},
TargetNullValue='',
UpdateSourceTrigger=PropertyChanged,
ValidatesOnNotifyDataErrors=True,
ValidatesOnExceptions=True}" ..>
<i:Interaction.Behaviors>
<behaviors:TextBoxInputRegExBehavior
EmptyValue="0.00"
IgnoreSpace="True"
RegularExpression="^\d{1,2}(\.?\d{1,2})?$"
MaxLength="6"
/>
</i:Interaction.Behaviors>
</controls:MementoTextBox>
</WrapPanel>
<TextBlock Style="{DynamicResource GrayTextBlockStyle}" Text="Minimal bank statement line age" ../>
<controls:MementoTextBox Text="{Binding RefundCustomerConfiguration.MinimalBankStatementLineAge,
Mode=TwoWay,
NotifyOnValidationError=True,
ValidatesOnNotifyDataErrors=True,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnExceptions=True }" ..>
<i:Interaction.Behaviors>
<behaviors:TextBoxInputRegExBehavior
EmptyValue="0"
IgnoreSpace="True"
RegularExpression="^\d{1,3}$"
MaxLength="3"
/>
</i:Interaction.Behaviors>
</controls:MementoTextBox>
</StackPanel>
</controls:ExpandableSettingsPanel>
这是我的XAML部分。
public RefundCustomerConfiguration RefundCustomerConfiguration
{
get { return _refundCustomerConfiguration; }
set
{
SetProperty(ref _refundCustomerConfiguration, value);
OnPropertyChanged("RefundCustomerConfigurationEnabled");
}
}
[Required(ErrorMessage = "This field is required")]
public bool IsAllowedWithinReversalPeriod
{
get { return GetValue(() => IsAllowedWithinReversalPeriod); }
set
{
SetPropertyValue(value);
}
}
这是我的财产;首先 - 在ViewModel中。第二 - 在第一个属性类。
答案 0 :(得分:0)
将按钮的可见性属性绑定到类中的Visibility方法,该方法实现了INotifyPropertyChanged接口,如下所示:
public Visibility btnVisible
{
get
{
if(<your condition>)
return Visibility.Visible;
else
return Visibility.Collapsed;
}
}