gpt4 book ai didi

c# - 如何绑定(bind)listview选中的item到其他控件?

转载 作者:太空宇宙 更新时间:2023-11-03 12:50:49 24 4
gpt4 key购买 nike

假设我有一个包含 10 个项目的集合。 ListView 绑定(bind)到此集合。因此 ListView 中将显示 10 个项目。

ListView 选择模式设置为单项。一次只能选择一项。

ListView 有 3 列。频率、幅度和相位。这些属性中的每一个都应该由 slider 等工具控制。因此,当用户拖动 slider 时,应更改所选项目的属性。

所以我想将选定的项目属性绑定(bind)到一些 slider 。我能够在后面的代码中做到这一点。这看起来很难看,我想知道在 XAML 中是否可行。

简化模型是这样的。 (只显示一个属性)

internal class Waveform : INotifyPropertyChanged
{
public double Frequency { get; set; }

private void Initialize()
{
FreqBinding = new Binding
{
Source = this,
Path = FreqPath,
Mode = BindingMode.TwoWay
};
}

public Binding FreqBinding { get; private set; } // binding used to bind this item to frequency slider

private static readonly PropertyPath FreqPath = new PropertyPath(nameof(Frequency));
}

这是其中一个 slider 。

<Slider x:Name="FreqSlider"/>

ListView 选择的索引更改时会触发一个事件。

private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Toolbox.IsEnabled = ListView.SelectedIndex >= 0;

if (Toolbox.IsEnabled)
{
ResetBindings((Waveform)ListView.SelectedItem);
}
else
{
BindingOperations.ClearAllBindings(FreqSlider);
}
}

private void ResetBindings(Waveform obj)
{
FreqSlider.SetBinding(RangeBase.ValueProperty, obj.FreqBinding);
}

这是为工具箱中的所有 3 个控件完成的。我想知道是否可以在 XAML 中完成这一切?

为了更清楚一点。这是我当前的 XAML 代码。简化。

<ListView x:Name="ListView" ItemsSource="{Binding WaveCollection, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MainWindow}}}" SelectionMode="Single">
<ListView.View>
<GridView>
<GridViewColumn Header="Frequency" DisplayMemberBinding="{Binding Frequency, StringFormat=0.#### Hz}"/>
</GridView>
</ListView.View>
</ListView>

现在正在寻找一种方法来进行这种绑定(bind)。

<Slider x:Name="FreqSlider" Value="{Binding ???}"/>

最佳答案

如果WaveCollectionObservableCollection<WaveForm> .如果WaveForm类属性,如 Frequency看起来像这样(实现了 NotifyPropertyChanged)。

private double _freq;

public double Frequency
{
get { return _freq; }
set { _freq = value; NotifyPropertyChanged( "Frequency" ); }
}

#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
protected void NotifyPropertyChanged( String info )
{
if ( PropertyChanged != null )
{
PropertyChanged( this, new PropertyChangedEventArgs( info ) );
}
}

你可以写Binding对于这样的 slider 。

{Binding ElementName=ListView, Path=SelectedItem.Frequency}

更新或在评论中提及

{Binding ElementName=ListView, Path=SelectedItem.(local:Waveform.Frequency)}

关于c# - 如何绑定(bind)listview选中的item到其他控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35619676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com