私はStackPanelを持つItemTemplateを含むListBoxを持っています。リストボックスのitemsource.Iに汎用リストを割り当てます。そのスタックパネルの可視性を変更したいと思います。 (mouseleftbutton "closeAll"をクリックしてリストボックス内のすべてのstackPanel項目を閉じると、折りたたまれた状態になるのを変更します)。これはstackpanel visibility = {Binding Acikmi}で行います。 私はPastAndOrクラスとそのプロパティ "Acikmi"を持っていて、最初の値は "可視"です。 バインディング双方向モードを使用して、「可視」から「折りたたみ」に「Acikmi」の値を変更する方法はありますか?ListBoxで双方向バインディングを使用するにはどうすればよいですか?
public static List<PastAndOr> GetPastOr()
{
string connStr = "server=localhost;user=root;database=carbovisor;port=3306;password=12345";
MySqlConnection conn = new MySqlConnection(connStr);
conn.Open();
MySqlCommand cmd = new MySqlCommand("SELECT s.sarjno as sarjno,s.createdate as createdate,m.adi as madi,mp.parcakodu as parcakodu,mp.parcaadi as parcaadi,mp.malzeme as malzeme,mr.kodu as musterikodu,mr.adi as musteriadi FROM t_sepetler s JOIN t_mamul m ON [email protected] OR m.id=s.mamulid LEFT JOIN t_musteriparca mp ON mp.firmaid=s.musteriid LEFT JOIN t_musteriler mr ON mr.id=mp.firmaid WHERE s.createdate >= @tarih1 AND s.createdate <= @tarih2 GROUP BY sarjno,madi ORDER BY createdate DESC", conn);
cmd.Parameters.AddWithValue("@tarih1", PastProcess.tarih1);
cmd.Parameters.AddWithValue("@tarih2", PastProcess.tarih2);
cmd.Parameters.AddWithValue("@receteadi", PastProcess.receteadi);
cmd.Parameters.AddWithValue("@sarjno", PastProcess.sarjno);
MySqlDataReader dataReader = cmd.ExecuteReader();
List<PastAndOr> or = new List<PastAndOr>();
PastAndOr kayit2;
int IDSayac = 1;
while (dataReader.Read())
{
kayit2 = new PastAndOr();
kayit2.Adi = dataReader["madi"].ToString();
kayit2.SarjNo = dataReader["sarjno"].ToString();
kayit2.CreateDate = dataReader["createdate"].ToString();
kayit2.ParcaKodu = dataReader["parcakodu"].ToString();
kayit2.ParcaKoduAdi = dataReader["parcakodu"].ToString() + " - " + dataReader["parcaadi"].ToString();
kayit2.Malzeme = dataReader["malzeme"].ToString();
kayit2.MusteriKodu = dataReader["musterikodu"].ToString();
kayit2.MusteriKoduAdi = dataReader["musterikodu"].ToString() + " - " + dataReader["musteriadi"].ToString();
kayit2.Acikmi = Visibility.Visible;
kayit2.ID = IDSayac;
or.Add(kayit2);
IDSayac++;
}
conn.Close();
return or;
}
private void closeAll_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
// what goes here?
}
public class PastAndOr
{
public Visibility Acikmi { get; set; }
public int ID { get; set; }
public string Adi { get; set; }
public string SarjNo { get; set; }
public string CreateDate { get; set; }
public string ParcaKodu { get; set; }
public string ParcaKoduAdi { get; set; }
public string Malzeme { get; set; }
public string MusteriKodu { get; set; }
public string MusteriKoduAdi { get; set; }
}
XAMLコード
<ListBox x:Name="listBoxEditPast" SelectionMode="Single" Margin="0" Background="#272B34" ScrollViewer.VerticalScrollBarVisibility="Visible">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Border Grid.Row="0" BorderThickness="4,0,0,0" Margin="2,0,0,0" Height="29" Background="#2E323B" Width="1050" BorderBrush="#1373A9" MouseLeftButtonDown="Border_MouseLeftButtonDown">
<DockPanel Name="dockPanelPast" Margin="0,4,0,0">
<Image Name="imgArrow" Source="images/down-arrow.png" HorizontalAlignment="Left" Width="20" Height="18"/>
<TextBlock Text="{Binding CreateDate}" Name="txtTarih" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="16"/>
<TextBlock Text="{Binding SarjNo}" Name="txtSarjNo" Foreground="#FF9CA518" HorizontalAlignment="Stretch" VerticalAlignment="Center" FontSize="16" Margin="50,0,0,0" Width="90"/>
<TextBlock Text="{Binding Adi}" Name="txtReceteAdi" Foreground="#FF26A053" VerticalAlignment="Center" FontSize="16" Margin="40,0,0,0" HorizontalAlignment="Stretch"/>
<Button Content="Detaylar" Style="{StaticResource BlueButton}" HorizontalAlignment="Right" VerticalAlignment="Center" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" DockPanel.Dock="Right"/>
</DockPanel>
</Border>
<StackPanel Grid.Row="1" Name="stackPanelDetay" Tag="{Binding ID}" Visibility="{Binding Acikmi,Mode=TwoWay}">
<DockPanel>
<TextBlock Text="Sipariş No" Foreground="#D9480F" VerticalAlignment="Center" />
<TextBlock Text="Parça" Foreground="#AF0FD9" VerticalAlignment="Center" Margin="50,0,0,0" Width="200" />
<TextBlock Text="Malzeme" Foreground="White" VerticalAlignment="Center" Margin="150,0,0,0" Width="90"/>
<TextBlock Text="Müşteri" Foreground="#AF0FD9" VerticalAlignment="Center" Margin="70,0,0,0" />
</DockPanel>
<DockPanel>
<TextBlock Text="{Binding ID}" Foreground="White" VerticalAlignment="Center" Width="100"/>
<TextBlock Text="{Binding ParcaKoduAdi}" Foreground="White" VerticalAlignment="Center" Margin="5,0,0,0" Width="200" />
<TextBlock Text="{Binding Malzeme}" Foreground="White" VerticalAlignment="Center" Margin="152,0,0,0" Width="90" />
<TextBlock Text="{Binding MusteriKoduAdi}" Foreground="White" VerticalAlignment="Center" Margin="70,0,0,0" />
</DockPanel>
</StackPanel>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
はStackOverflowのへようこそ!まず[How to Ask](https://stackoverflow.com/help/asking)のヘルプページをお読みください。私たちは[mcve]を見たいと思っています(** minimal **の単語に細心の注意を払ってください)。あなたの質問のタイトルを変更しました。なぜなら、強制タグを含むべきではないからです。 – dymanoid
バインディングはTwoWayであってはなりません。代わりに、あなたのボタンアクションは、不可視でなければならないすべての 'PastAndOr'アイテムの' Acikmi'プロパティを直接設定する必要があります。したがって、クラスはINotifyPropertyChangedインターフェイスを実装し、プロパティ値が変更されたときにPropertyChangedイベントを発生させる必要があります。 – Clemens
INotifyPropertyChangedがありません。 – Ramankingdom