Может ли кто-нибудь объяснить мне следующую строку XAML?
DataContext="{Binding RelativeSource={RelativeSource Self}}"
Здесь простой пример использования.
Как заменить эту строку кодом C#
?
Может ли кто-нибудь объяснить мне следующую строку XAML?
DataContext="{Binding RelativeSource={RelativeSource Self}}"
Здесь простой пример использования.
Как заменить эту строку кодом C#
?
Это просто устанавливает свойство DataContext
, равное объекту со свойством. Эквивалент кода был бы this.DataContext = this;
Edit
Свойством DataContext
является объект, который используется как контекст для всех привязок, которые происходят на этом объекте и его дочерних объектах. Если у вас нет правильного набора DataContext
для модели, к которой вы хотите привязать, все ваши привязки не удастся.
Edit2
Вот как установить его в код позади (соответствующий вашему примеру):
public partial class ListViewTest : Window
{
ObservableCollection<GameData> _GameCollection =
new ObservableCollection<GameData>();
public ListViewTest()
{
_GameCollection.Add(new GameData {
GameName = "World Of Warcraft",
Creator = "Blizzard",
Publisher = "Blizzard" });
_GameCollection.Add(new GameData {
GameName = "Halo",
Creator = "Bungie",
Publisher = "Microsoft" });
_GameCollection.Add(new GameData {
GameName = "Gears Of War",
Creator = "Epic",
Publisher = "Microsoft" });
InitializeComponent();
this.DataContext = this; //important part
}
public ObservableCollection<GameData> GameCollection
{ get { return _GameCollection; } }
private void AddRow_Click(object sender, RoutedEventArgs e)
{
_GameCollection.Add(new GameData {
GameName = "A New Game",
Creator = "A New Creator",
Publisher = "A New Publisher" });
}
}
Это означает, что "DataContext является владельцем этого свойства DataContext", таким образом, элемент управления.
В С# это будет
myTextBox.DataContext = myTextBox;
Чтобы ответить на второй вопрос: Иногда может быть полезно объявить DataContext на XAML, потому что вы можете видеть привязку данных во время разработки. Если вы объявите его по коду, привязка данных будет выполняться только во время выполнения.
Существуют другие способы достижения времени разработки (поддельные). Чтобы узнать больше, пожалуйста, спросите о "гибкости".
Примечание. Как правило, помните, что если у вас есть другой вопрос, вы должны создать новый запрос stackoverflow: -)