我有一个自定义ListView
的面板。 ListView's
项目包含GroupBox
。 GroupBox
包含ListView
。这个ListView's
项目包含GroupBox
等等。
上面的所有控件都有自定义模板和样式
Controls VisualTree最低节点中有ToggleButtons
。
检查这些按钮后,除了单击按钮外,我需要禁用所有面板。
我想避免在viewModel类中通过父级链接事件。
我正在使用mvvm模式,如果可能的话,我想在xaml方面解决它。
编辑:这是一个截图,而选择按钮应禁用面板
热烈欢迎任何建议。
答案 0 :(得分:1)
你需要实现相似的源绑定,如下所示。
IsEnabled="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}},Path=IsEnabled}"
答案 1 :(得分:0)
在ViewModel中只有一个只读属性,它取决于你的ToggleButton所绑定的属性。
<强>视图模型:强>
private Boolean mSourceIsPicked;
public Boolean SourceIsPicked
{
get { return mSourceIsPicked; }
set
{
SetProperty("SourceIsPicked", ref mSourceIsPicked, value);
NotifyPropertyChanged("IsSourceChangeable");
}
}
public Boolean IsSourceChangeable
{
get { return ! this.SourceIsPicked; }
}
然后,在您的视图中,只需将其他控件的IsEnabled属性绑定到该新属性。
<ComboBox ItemsSource="{Binding SourceTypes}"
IsEnabled={Binding IsSourceChangeable}" />
绑定到属性的优点是您可以在视图中添加/删除控件,只需绑定到此属性而无需更改其他XAML。您还可以通过 not 绑定到此属性来更改任何控件的行为。
如果您真的想要一个仅限XAML的解决方案,您可以为面板中的每个控件命名,并在&#34; SourceIsPicked&#34;上使用TargetName使用DataTrigger。禁用其他人的财产:
<ComboBox x:Name="cboSourceTypes" ... />
<ComboBox x:Name="cboSourceNames" ... />
<ToggleButton>
<ToggleButton.Style>
<Style TargetType="{x:Type ToggleButton}">
<Style.Triggers>
<DataTrigger Binding="{Binding SourceIsPicked}" Value="True">
<Setter TargetName="cboSourceTypes"
Property="IsEnabled"
Value="False" />
<Setter TargetName="cboSourceNames"
Property="IsEnabled"
Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
请注意,这都是徒手的,所以你可能需要稍微调整一下,但它会给你一个想法。