我有两个声明的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
}
答案 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}"/>