を発見していない他の人に役立つソリューションのコードがありますバックエンドのC#とは対照的に、XAMLのすべてを行います。これは、これは、ウィンドウ上のリストボックスである
<ListBox x:Name="lstServers" HorizontalAlignment="Left" Height="285" Margin="20,37,0,0" VerticalAlignment="Top" Width="215"
ItemsSource="{Binding Settings.Servers}"
SelectedItem="{Binding Settings.ManageSelectedServer, Mode=TwoWay}"
DisplayMemberPath="UserFriendlyName"/>
私は私のプロジェクトは、(何のバックエンドコードを持たないバックエンドのコードを最小限に抑え、かつ可能な場合)MVVMを利用しない方法です。ここで指摘するキーは非常に難解かもしれませんが、Servers Observableコレクションを持つビューモデルのSettingsオブジェクトに設定されている通常のItemsSourceプロパティです。
サーバーは、UserFriendlyNameというプロパティーを持つクラスです。
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");
}
}
これは、クラス自体の部分的なコードスニペットです。
ListBoxのSelectedItemは、ManageSelectedServerというモデルビューに格納されているSelectedオブジェクトのインスタンスにバインドされています。
トリッキーな部分ここでは、DisplayMemberPathが "{UserName}"と "UserFriendlyName"に設定されています。 これはキーです
{Binding UserFriendlyName}を使用すると、コレクションにUserFriendlyNamesが表示されますが、そのプロパティの変更は反映されません。ユーザーは(もリストボックス内のテキストを変更する必要があります)ユーザーフレンドリ名を更新することができTextBoxのため
XAMLは次のとおりです。
<TextBox x:Name="txtDisplayName" HorizontalAlignment="Left" Height="23" Margin="395,40,0,0" TextWrapping="Wrap"
Text="{Binding ElementName=lstServers,Path=SelectedItem.UserFriendlyName, UpdateSourceTrigger=PropertyChanged}"
VerticalAlignmentを=「トップ」幅=「240」/>
これは、TextBoxのTextプロパティを設定し、それをListBox要素lstServers SelectedItemプロパティUserFriendlyNameにバインドします。 UpdateSourceTrigger = PropertyChangedも含めて、テキストソースに加えられた変更が変更されたことを通知します。
XAMLはトリッキーです!