справка по привязке wpf / silverlight


Допустим, у меня есть сложное свойство называется CarData и простой AllowSubmit типа bool. Xaml:

<Grid ..... DataContext={Binding CarData}>
...TextBoxes binded, working
....

last line in the grid:
<Button IsEnabled={Binding AllowSubmit}>
</Grid>

Проблема в том, что AllowSubmit не привязан. Я думаю, это потому, что DataContext сетки привязан к свойству CarData, потому что если я помещу кнопку вне сетки, она будет работать. Также я подумал, что если я "переопределю" DataContext, установив кнопки DataContext в AllowSubmit, это поможет, но не будет работать. Я знал, что это довольно новый вопрос, но каков правильный путь? Я вполне уверен,что можно привязать кнопку к другому свойству, чем свойство сетки. Спасибо за вашу помощь.

1 2

1 ответ:

Свойство DataContext наследуется элементами управления внутри него. Так что если вы измените его на сетке, то он будет эффективно изменять его на всех элементах управления внутри также.

Похоже, что вы должны делать:

<Grid>
    <TextBox Text="{Binding CarData.Make}" />>
    <Button IsEnabled="{Binding AllowSubmit}" />>
<Grid>

Здесь текстовое поле сверлит в CarData, поэтому DataContext кнопки не затрагивается.