[英]binding a property of a button to static field class(MVVM)
我在主窗口上有按鈕,我想通過靜態字段類啟用和禁用該控件。 無需轉到后面的代碼,這是否可能?
主窗口
<Button x:Name="btnAanpassen" Content="Aanpassen" Grid.Row="1" Command="{Binding SaveItemCommand}" CommandParameter="{Binding SelectedItem}" IsEnabled="{Binding EnableDisable}"/>
我的虛擬機
private static object _selectedItem;
public static object SelectedItem
{
get { return _selectedItem; }
set {
if (SelectedItem != null)
{
//enable control
}
else
{
//disable control
}
_selectedItem = value; }
}
private Boolean _enableDisable;
public Boolean EnableDisable
{
get { return _enableDisable; }
set { _enableDisable = value; OnPropertyChanged("EnableDisable"); }
}
您可以嘗試以下方法:
<Window.Resources>
<yourNS:YourMVVM x:Key="mvvm"/>
</Window.Resources>
...
<Button x:Name="btnAanpassen" Content="Aanpassen" Grid.Row="1" Command="{Binding SaveItemCommand}"
CommandParameter="{Binding Source={StaticResource mvvm}, Path=SelectedItem}" IsEnabled="{Binding EnableDisable}"/>
在這種情況下,使用Static Property
存在一些問題。 我有一個解決此問題的方法。 請參閱以下適合您的摘錄。
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
的常規Property
。 我還聲明了一個名為mySharedVariableToOtherClass
的Property
,該Property
是Static
,用於從SelectedItem
屬性中設置值。 這是Static
,因此您也可以從其他類訪問它。 在我的開篇中, Trigger
是禁用Button
控件的正確選擇。
<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");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.