簡體   English   中英

將按鈕的屬性綁定到靜態字段類(MVVM)

[英]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 我還聲明了一個名為mySharedVariableToOtherClassProperty ,該PropertyStatic ,用於從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>

嘗試以下鏈接中提到的方法

WPF TwoWay綁定到靜態屬性

您不能直接綁定到靜態屬性。 如果您確實需要將此屬性設為靜態,則一種方法是創建一個獲取並設置它的代理屬性。 它基於單例模式

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM