这个问题涉及一个极小的Winforms GUI。让我们知道我有数据绑定和INotifyPropertyChanged的基本知识,并在WPF的ViewModels中使用它们。但我不知道Winforms。这是为了学校作业。
所以我有一个具有DisplayName
属性的类。我还有一个ListBox
,Items
是我班级的一系列实例。我指出了myListBox.DisplayMember = "DisplayName";
在我的类实例中更改了一个值,导致DisplayName
属性返回不同的值后,如何告诉我的ListBox
拉{{1}再次刷新属性?
答案 0 :(得分:3)
我需要使用组合框来做同样的事情。我找到的解决方法是清除并重置DisplayMember属性。
这有效:
myComboBox.DisplayMember = null;
myComboBox.DisplayMember = "DisplayName";
重要的是要注意,这可能不是最佳解决方案,因为它会导致多个SelectedValueChanged事件,但最终结果是成功的。
答案 1 :(得分:2)
这样做可能需要重新绑定列表框,丢失selectedIndex等。
一种解决方法是忘记DisplayMember属性并改为处理ListBox的Format事件。像(来自记忆):
// untested
e.Value = (e.Item as MyClass).DisplayValue;
答案 2 :(得分:0)
我知道这是很久以前但是我有类似的问题,找不到令人满意的解决方案,最后在更新值后最后解决了这一行:
bindingsource.EndEdit();
列表框上的项目反映了在单击“更新”按钮后输入到文本框中的任何更改。所以在这样的行之后:
textbox1.DataBindings["Text"].WriteValue();
textbox2.DataBindings["Text"].WriteValue();
只需插入此行:
bindingsourcevariable.EndEdit();
希望这有助于其他遇到类似问题的人,但却找不到合适的解决方案
答案 3 :(得分:0)
这是解决方案代码,它在XAML中执行所有操作,而不是后端C#。这就是我使用MVVM进行项目的方法(最小化后端代码,如果可能的话,没有后端代码)
public sealed class AutoSyncServer : ObservableModel
{
public AutoSyncServer()
{
Port = "80";
UserFriendlyName = "AutoSync Server";
Server = "localhost";
}
private string _userFriendlyName;
public string UserFriendlyName
{
get { return _userFriendlyName;}
set
{
_userFriendlyName = value;
OnPropertyChanged("UserFriendlyName");
}
}
这是Window上的列表框。这里指出的关键非常棘手,通常是在我的视图模型上设置为Settings对象的ItemsSource属性,该对象具有Servers Observable集合。
Servers是一个具有名为UserFriendlyName的属性的类。
<TextBox x:Name="txtDisplayName" HorizontalAlignment="Left" Height="23" Margin="395,40,0,0" TextWrapping="Wrap"
Text="{Binding ElementName=lstServers,Path=SelectedItem.UserFriendlyName, UpdateSourceTrigger=PropertyChanged}"
这是您自己的部分代码段。
ListBox的SelectedItem绑定到我存储在名为ManageSelectedServer的模型视图中的Selected对象的实例。
这里的棘手的部分是将DisplayMemberPath设置为&#34; UserFriendlyName&#34;而不是&#34; {绑定UserFriendlyName}&#34;。 这是关键
如果您使用{Binding UserFriendlyName},它将在集合中显示UserFriendlyNames,但不会反映该属性的任何更改。
用户可以更新用户友好名称(也应该更改列表框中的文本)的TextBox的XAML是:
{{1}}
VerticalAlignment =&#34;顶&#34;宽度=&#34; 240&#34; /&GT;
这将设置TextBox的Text属性,并将其绑定到ListBox元素lstServers SelectedItem属性UserFriendlyName。我还包括一个UpdateSourceTrigger = PropertyChanged,以便对文本源所做的任何更改都会通知它们已被更改。
XAML很棘手!