jpi*_*son 7 variables wpf resources binding reusability
我在WPF应用程序中已经到了这一点,我的控件上的所有绑定都变得非常重复,而且有点过于冗长.此外,如果我想更改此绑定,我将不得不在各个地方而不是一个地方更改它.
是否有任何方法可以在资源中编写绑定的源部分,然后通过使用更紧凑的语法引用它来重用它.我四处寻找这些功能,但我还没找到.
我现在在做什么
<StackPanel>
<ToggleButton x:Name="someToggleButton" />
<Button Visibility="{Binding ElementName=someToggleButton, Path=IsChecked, Converter={StaticResource BoolToVisibilityConverter}}" />
<Grid Visibility="{Binding ElementName=someToggleButton, Path=IsChecked, Converter={StaticResource BoolToVisibilityConverter}}" />
<TextBox Visibility="{Binding ElementName=someToggleButton, Path=IsChecked, Converter={StaticResource BoolToVisibilityConverter}}" />
<CheckBox Visibility="{Binding ElementName=someToggleButton, Path=IsChecked, Converter={StaticResource BoolToVisibilityConverter}}" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
我想做什么(伪代码)
<StackPanel>
<StackPanel.Resources>
<Variable x:Name="someToggleButtonIsChecked"
Type="{x:Type Visibility}"
Value="{Binding ElementName=someToggleButton, Path=IsChecked, Converter={StaticResource BoolToVisibilityConverter}}" />
</StackPanel.Resources>
<ToggleButton x:Name="someToggleButton" />
<Button Visibility="{VariableBinding someToggleButtonIsChecked}" />
<Grid Visibility="{VariableBinding someToggleButtonIsChecked}" />
<TextBox Visibility="{VariableBinding someToggleButtonIsChecked}" />
<CheckBox Visibility="{VariableBinding someToggleButtonIsChecked}" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
是否有类似的类似功能或技术允许我声明绑定源一次然后重用它?
您可以将someToggleButton
的IsChecked
属性绑定到视图模型(DataContext)上的属性并使用它。它看起来像这样:
<StackPanel>
<ToggleButton x:Name="someToggleButton" IsChecked="{Binding ToggleVisibility, Mode=TwoWay, Converter={StaticResource BoolToVisibilityConverter}}" />
<Button Visibility="{Binding ToggleVisibility}" />
<Grid Visibility="{Binding ToggleVisibility}" />
<TextBox Visibility="{Binding ToggleVisibility}" />
<CheckBox Visibility="{Binding ToggleVisibility}" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
这需要您的Window
具有名为of 类型的DataContext
属性ToggleVisibility
Visibility
。
编辑:
为了进一步说明,您的视图模型可能如下所示:
public class SomeViewModel : INotifyPropertyChanged
{
private Visibility toggleVisibility;
public SomeViewModel()
{
this.toggleVisibility = Visibility.Visible;
}
public Visibility ToggleVisibility
{
get
{
return this.toggleVisibility;
}
set
{
this.toggleVisibility = value;
RaisePropertyChanged("ToggleVisibility");
}
}
private void RaisePropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
Run Code Online (Sandbox Code Playgroud)
然后你可以将它的一个实例设置为DataContext
on theWindow
甚至只是 on theStackPanel