В моем элементе управления представлением списка (или любом другом элементе управления WPF, который будет соответствовать ситуации) я хотел бы иметь один TextBlock, который остается согласованным для всех элементов, в то время как другой TextBlock, который изменяется в зависимости от значения в ObservableCollection.Вот как мой код в настоящее время выложен:
XAML
<ListView ItemsSource="{Binding Path=MyItems, Mode=TwoWay}">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="StrVal" Text="{Binding StrVal}" />
<TextBlock x:Name="ConstVal" Text="{Binding MyVM.ConstVal, Mode=TwoWay}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Модель
public class MyItem
{
public string StrVal { get; set; }
}
ViewModel
public MyVM()
{
ObservableCollection<MyItem> myItems = new ObservableCollection<MyItem>();
for (int i = 0 ; i < 10; i++)
myItems.Add(new MyItem { StrVal = i.ToString()});
MyItems = myItems;
ConstVal = "1";
}
private string _constVal;
public string ConstVal
{
get
{
return _constVal;
}
set
{
_constVal = value;
OnPropertyChanged("ConstVal");
}
}
public ObservableCollection<MyItem> MyItems { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string item)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(item));
}
}
}
Код позади
this.DataContext = new MyVM();
Свойство StrVal правильно повторяется в ListView, но ConstValTextBlock не показывает ConstVal, который содержится в VM.Я предполагаю, что это потому, что ItemsSource объекта ListView - это MyItems, и я не могу ссылаться на другие переменные вне того, что содержится в MyItems.
Мой вопрос: как заставить ConstVal отображать значение в ViewModel для всех элементов списка, которые будут контролироваться Наблюдаемой коллекцией MyItems.