C# 将按钮的属性绑定到静态字段类(MVVM)
我的主窗口上有按钮,我想通过静态字段类启用和禁用该控件。这是否可能,而不去后面的代码 主窗口C# 将按钮的属性绑定到静态字段类(MVVM),c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我的主窗口上有按钮,我想通过静态字段类启用和禁用该控件。这是否可能,而不去后面的代码 主窗口 我的虚拟机 私有静态对象\u selectedItem; 公共静态对象SelectedItem { 获取{return\u selectedItem;} 设置{ 如果(SelectedItem!=null) { //启用控制 } 其他的 { //禁用控制 } _selectedItem=value;} } 私有布尔值_enableDisable; 公共布尔启用禁用 { 获取{return\u ena
我的虚拟机
私有静态对象\u selectedItem;
公共静态对象SelectedItem
{
获取{return\u selectedItem;}
设置{
如果(SelectedItem!=null)
{
//启用控制
}
其他的
{
//禁用控制
}
_selectedItem=value;}
}
私有布尔值_enableDisable;
公共布尔启用禁用
{
获取{return\u enableDisable;}
设置{u enableDisable=value;OnPropertyChanged(“enableDisable”);}
}
您可以尝试以下方法:
<Window.Resources>
<yourNS:YourMVVM x:Key="mvvm"/>
</Window.Resources>
在这种情况下使用
静态属性时存在一些问题。我有一个解决这个问题的办法。请参阅下面适合您的代码片段
public partial class MainWindow : Window,INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public static object mySharedVariableToOtherClass = value;
private object _selectedItem;
public object SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem = value;
mySharedVariableToOtherClass = null;
OnPropertyChanged("SelectedItem");
}
}
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
SelectedItem = "vimal";
}
private void Button_Click(object sender, RoutedEventArgs e)
{
SelectedItem = null;
}
public void OnPropertyChanged(string PropertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(PropertyName));
}
}
}
在上面的代码片段中,我声明了SelectedItem
属性是一个普通的属性
,用于绑定到UIElement
。我还声明了一个名为mySharedVariableToOtherClass
的属性
,它是静态的
,用于设置SelectedItem
属性中的值。这是静态的,因此您也可以从其他类访问它。在我的openion中,触发器
是禁用按钮
控件的正确选择
<Grid Name="MainGrid">
<Button Width="100"
Height="40"
Click="Button_Click">
<Button.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=SelectedItem}"
Value="{x:Null}">
<Setter Property="Button.IsEnabled"
Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
<TextBlock Width="200"
Height="30"
Text="{Binding SelectedItem, UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"
Margin="74,46,69,154" />
</Grid>
尝试以下链接中提到的方法
不能直接绑定到静态属性。
如果您真的需要这个属性是静态的,一种方法是创建一个代理属性来获取和设置它。这是基于
你能行!阅读此处:它只执行代码,当单击1个按钮时,它需要更新您需要的特定操作,其他按钮将被禁用?要使更新生效,您需要实现INotifyPropertyChanged
,简而言之,这意味着没有静态属性。为什么它需要是静态的?其他类需要访问它。mainwindow有按钮,usercontrol有datagrid。单击行datagrid按钮时,该按钮变为启用状态,如果==null,则禁用
<Grid Name="MainGrid">
<Button Width="100"
Height="40"
Click="Button_Click">
<Button.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=SelectedItem}"
Value="{x:Null}">
<Setter Property="Button.IsEnabled"
Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
<TextBlock Width="200"
Height="30"
Text="{Binding SelectedItem, UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"
Margin="74,46,69,154" />
</Grid>
private static readonly ClassName _this = new ClassName();
public object ProxySelectedItem
{
get { return SelectedItem; }
set { SelectedItem = value; }
}
private static object _selectedItem;
public static object SelectedItem
{
get { return _selectedItem; }
set
{
if (SelectedItem != null)
{
_this.EnableDisable = true;
}
else
{
_this.EnableDisable = false;
}
_selectedItem = value;
_this.OnPropertyChanged("ProxySelectedItem");
}
}
private bool _enableDisable;
public bool EnableDisable
{
get { return _enableDisable; }
set
{
_enableDisable = value;
OnPropertyChanged("EnableDisable");
}
}