0
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
  <Grid.Resources><DataTemplate x:Key="mDataTemplate">
    <Button BorderBrush="#FF767171" Margin="10,10,0,0" Click="button1_Click" IsEnabled="{Binding Enabled}">
      <Button.Content>
        <Grid x:Name="ButtonGrid" Height="Auto" HorizontalAlignment="Left" erticalAlignment="Top">
          <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />                                 
          </Grid.RowDefinitions>
     <TextBlock Grid.Row="0" Height="Auto" HorizontalAlignment="Left" Text="{Binding TitleText}" VerticalAlignment="Top" Width="Auto"  FontSize="30" />
     <TextBlock Grid.Row="1" Height="Auto" HorizontalAlignment="Left" Text="{Binding DetailText}" VerticalAlignment="Top" Margin="10,0,0,0" Width="Auto"  FontSize="20" />
        </Grid> </Button.Content> </Button> </DataTemplate> </Grid.Resources>

私のコード。

public class AboutData
    {        
        public string TitleText { get; set; }
        public string DetailText { get; set; }
        public bool Enabled { get; set; }
    }
}

リストボックスの Loadevent

ObservableCollection<AboutData> aCollection = new ObservableCollection<AboutData>();
aCollection.Add(new AboutData { TitleText="Title1", DetailText="Detail1", Enabled= true});
aCollection.Add(new AboutData { TitleText="Title2", DetailText="Detail2", Enabled= true});
aCollection.Add(new AboutData { TitleText="Title3", DetailText="Detail3", Enabled= true});

ContentPanel.DataContext = aCollection;

listBox1 (私のリストボックス) がロードされたら、AboutData の ObservableCollection を作成し、それを ControlPanel.DataContext に割り当てます。

特定のボタンをクリックすると、リスボックスのボタンを無効にしたい。方法がわからない。助けてください。

4

1 に答える 1

0

AboutDataのEnabledプロパティを設定できるはずです

public void button1_Click(object sender, RoutedEvent e)
{
  AboutData dataContext = (sender as Button).DataContext as AboutData;
  dataContext.Enabled = false;
}

さらに、バインディングが機能するように、AboutDataにINotifyPropertyChangedを実装する必要があります(これを参照)

public class AboutData : INotifyPropertyChanged
{
    // boiler-plate
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
    protected bool SetField<T>(ref T field, T value, string propertyName)
    {
        if (EqualityComparer<T>.Default.Equals(field, value)) return false;
        field = value;
        OnPropertyChanged(propertyName);
        return true;
    }

    // props
    private string _Enabled;
    public string Enabled
    {
        get { return Enabled; }
        set { SetField(ref _Enabled, value, "Enabled"); }
    }

    // etc. for TitleText, DetailText
}
于 2012-05-20T00:27:35.483 に答える