gpt4 book ai didi

WPF ListView 设置 SelectedItem

转载 作者:行者123 更新时间:2023-12-04 06:58:08 28 4
gpt4 key购买 nike

我试图寻找答案,但我没有任何运气。基本上我有一个 ListView ,它绑定(bind)到从 View 模型返回的集合。我将 ListView 的选定项目绑定(bind)到我的 ListView 中的一个属性,以执行验证以确保选择了一个项目。问题是有时我想用已经选择的项目之一加载这个 ListView 。我希望能够使用我想要选择的对象在我的 View 模型上设置属性,并让它自动选择该项目。这没有发生。我的 ListView 在没有选择项目的情况下加载。我可以成功地将选定的索引设置为第 0 个索引,那么为什么我不能设置选定的值。 ListView 处于单选模式。

这是我的 ListView 中的相关代码

<ListView Name="listView1" ItemsSource="{Binding Path=AvailableStyles}" SelectionMode="Single">
<ListView.SelectedItem>
<Binding Path="SelectedStyle" ValidatesOnDataErrors="True" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" BindingGroupName="StyleBinding" >

</Binding>
</ListView.SelectedItem>
<ListView.View>
<GridView>
<GridViewColumn Header="StyleImage">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image Source="800.jpg"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Style Code" DisplayMemberBinding="{Binding StyleCode}"/>
<GridViewColumn Header="Style Name" DisplayMemberBinding="{Binding StyleName}"/>
</GridView>
</ListView.View>
</ListView>

这是我的 View 模型中的相关代码
public class StyleChooserController : BaseController, IDataErrorInfo, INotifyPropertyChanged
{
private IList<Style> availableStyles;
private Style selectedStyle;

public IList<Style> AvailableStyles
{
get { return availableStyles; }
set
{
if (value == availableStyles)
return;

availableStyles = value;

OnPropertyChanged("AvailableStyles");
}
}
public Style SelectedStyle
{
get { return selectedStyle; }
set
{
//if (value == selectedStyle)
// return;

selectedStyle = value;

OnPropertyChanged("SelectedStyle");
}
}

public StyleChooserController()
{
AvailableStyles = StyleService.GetStyleByVenue(1);

if (ApplicationContext.CurrentStyle != null)
{
SelectedStyle = ApplicationContext.CurrentStyle;
}
}

public string Error
{
get { return null; }
}

public string this[string columnName]
{
get
{
string error = string.Empty;
if (columnName == "SelectedStyle")
{
if (SelectedStyle == null)
{
error = "required";
}
}

return error;
}
}

public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs(propertyName);
handler(this, e);
}
}

}

我应该注意,这里引用的“样式”与 WPF 无关。这是一个业务对象。我真的在寻找一种不会破坏 MVVM 模式的解决方案,但我愿意让一些功能正常运行。我试图遍历 Listview.Items 列表只是为了手动设置它,但是当我尝试时它总是空的。任何帮助表示赞赏。

编辑:我更新了代码以使用 INotifyPropertyChanged。它仍然无法正常工作。任何其他建议
第二次编辑:我添加了 UpdateSourceTrigger="PropertyChanged"。那仍然没有用。

谢谢

最佳答案

您的问题很可能是因为您的 SelectedItem Style是不同的 StyleAvailableStyles 中匹配的实例在 ItemsSource .

您需要做的是在您的 Style 中提供您对平等的具体定义。类(class):

public class Style: IEquatable<Style>
{
public string StyleCode { get; set; }
public string StyleName { get; set; }
public virtual bool Equals(Style other)
{
return this.StyleCode == other.StyleCode;
}

public override bool Equals(object obj)
{
return Equals(obj as Style);
}
}

关于WPF ListView 设置 SelectedItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2291359/

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