禁用DataTemplate添加的ToggleButtons

时间:2017-01-05 15:06:36

标签: c# wpf xaml mvvm

我有一个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

会更改文字,但不会禁用按钮。

0 个答案:

没有答案