WPF绑定滑块和文本框值为静态int值

时间:2014-08-04 18:50:35

标签: c# wpf

我有两个声明的public static int变量(它们是常量,但需要更改,所以我将它们设为静态):

    public static int CELLS_X = 381;
    public static int CELLS_Y = 185;

我需要将这些绑定到我的滑块和文本框,我该怎么做?

<TextBox Width="70" 
         Text="{Binding ElementName=cellSizesSlider, Path=Value, Mode=TwoWay}" 
         Margin="5" />

<Slider x:Name="cellSizesSlider" 
        Width="100" 
        Margin="5" 
        Minimum="0"
        Maximum="400" 
        TickPlacement="BottomRight" 
        TickFrequency="10" 
        IsSnapToTickEnabled="True" 
        Value="{Binding Path=CELLS_X, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

我只是在滑块中绑定CELLS_X因为我不在乎Y目前是什么。

修改

它们是静态的,因为我在代码的不同位置使用它们来声明我的Conway的生命游戏板的初始网格大小。它们是我用于初始启动的网格大小的常量,但我希望它是动态的。

它们被声明在MainWindow类的顶部:

public partial class MainWindow : Window {

    public const double CELL_SIZE = 5;
    public static int CELLS_X = 381;
    public static int CELLS_Y = 185;
    private BoardModel model = new BoardModel();

    public MainWindow() {
        InitializeComponent();
        this.model.Update += new BoardModel.OnUpdate(model_Update);

        ConwaysLifeBoard.Width = (MainWindow.CELL_SIZE * MainWindow.CELLS_X) + 40;
        ConwaysLifeBoard.Height = (MainWindow.CELL_SIZE * MainWindow.CELLS_Y) + 100;
    }

    // Details elided
}

1 个答案:

答案 0 :(得分:1)

首先,您无法绑定到字段,因此您需要将字段转换为属性。但是,即使您这样做,也不会获得静态属性的更改通知。一种方法是创建和引发PropertyNameChanged静态事件。对于少数几个属性来说,这将变得站不住脚。

private static int _cellsX = 381;

// Static property to bind to
public static int CellsX {
     get{return _cellsX;} 
     set{
        _cellsX = value;
        RaiseCellsXChanged();
    }
}

// Static event to create change notification
public static event EventHandler CellsXChanged;

// Event invocator
private static void RaiseCellsXChanged() {
    EventHandler handler = CellsXChanged;
    if (handler != null) {
        handler(null, EventArgs.Empty);
    }
}

和XAML

<Slider x:Name="cellSizesSlider" 
    Width="100" 
    Margin="5" 
    Minimum="0"
    Maximum="400" 
    TickPlacement="BottomRight" 
    TickFrequency="10" 
    IsSnapToTickEnabled="True" 
    Value="{Binding Path=CellsX}"/>