我有一个MainWindow.xaml,它有一个可调整大小的buttongrid。所述ButtonGrid的大小和内容绑定到LFields
列表,这是一个自定义类。所以我在ViewModel中设置了一些字段:
int num = 1;
public void SetupGame() {
_Fields = new ObservableCollection<LField>();
int num = 1;
for (Int32 i = 0; i < _model.Numbers / 5; i++)
{
for (Int32 j = 0; j < 5; j++)
{
Fields.Add(new LField
{
Text = num.ToString(),
X = i,
Y = j,
IsChecked = false,
Number = num,
ButtonChecker = new DelegateCommand(
param => CheckButton(Convert.ToInt32(param)))
});
num++;
}
}
OnPropertyChanged("Fields");
}
然后,基于这些LFields
,我在MainPage.xaml中创建了一个按钮网格:
<ItemsControl x:Name="ButtonGrid" Grid.Row="2" ItemsSource="{Binding Fields}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="{Binding Rows}" Columns="{Binding Columns}"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ToggleButton Command="{Binding ButtonChecker}"
CommandParameter="{Binding Number}"
Content="{Binding Text}"
Focusable="False"
RenderTransformOrigin="0.5, 0.5"
BorderThickness="0.3"
BorderBrush="Black"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Row" Value="{Binding X}" />
<Setter Property="Grid.Column" Value="{Binding Y}" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
现在,在某些时候,我想在我的ViewModel中禁用所有这些按钮。但是,由于它们是由模板创建的,因此我无法buttonname.IsEnabled = false;
。那么如何在ViewModel中禁用所有这些按钮?谢谢!
更新
我已将ToggleButton
的{{1}}媒体资源绑定到IsEnabled
中的媒体资源。然后,当我想要禁用按钮时,我会迭代LField
进行设置,但按钮不会被禁用。如果我更改文本,那可以,但按钮全部保持启用状态。所以这个:
Fields
会更改文字,但不会禁用按钮。