Bind
TextBox.Text
の最後のアイテムにできますObservableCollection<string>
か?
私はこれを試しました:
<TextBox Text={Binding XPath="Model/CollectionOfString[last()]"/>
しかし、それはバインドされません。
ありがとうございました。
XPath
非 XML データ ソースではプロパティを使用できないため、バインドされません。代わりに使用する必要がPath
あり、そのプロパティは同様の構文を提供しません。したがって、最後の値のインデックスがわからない限り、コレクションの最後の要素に直接バインドすることはできません。ただし、利用可能な回避策がいくつかあります。
コレクションを受け取り、それを最後の要素に「変換」するカスタム値コンバーターを作成することは難しくありません。ハワードの答えは、これを行うベアボーンコンバーターを提供します。
これはさらに簡単に実行できますが、コード ビハインドが必要です。
デフォルトのコレクション ビューで「現在の」アイテムをコレクションの最後のアイテムにPath=Model.CollectionOfString/
設定している場合は、(末尾のスラッシュに注意してください)を使用してバインドできます。モデル内でこれを行います:
// get a reference to the default collection view for this.CollectionOfString
var collectionView = CollectionViewSource.GetDefault(this.CollectionOfString);
// set the "current" item to the last, enabling direct binding to it with a /
collectionView.MoveCurrentToLast();
コレクションにアイテムが追加または削除された場合、現在のアイテム ポインターが自動的に調整されるとは限らないことに注意してください。
以下の方法をお試しください。
1、IValueConverter を使用します。
class DataSourceToLastItemConverter : IValueConverter
{
public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
IEnumerable<object> items = value as IEnumerable<object>;
if (items != null)
{
return items.LastOrDefault();
}
else return Binding.DoNothing;
}
public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new System.NotImplementedException();
}
}
次に、次のようにバインドします。
<Grid>
<Grid.Resources>
<local:DataSourceToLastItemConverter x:Key="DataSourceToLastItemConverter" />
</Grid.Resources>
<TextBox Text="{Binding Path=Model.CollectionOfString,Converter={StaticResource DataSourceToLastItemConverter}}"/>
</Grid>