में उपयोगकर्ता नियंत्रण की निर्भरता संपत्ति को सही ढंग से कैसे बाध्य करें, मैं सही ढंग से को WPF के साथ उपयोगकर्ता नियंत्रण को कार्यान्वित करने के लिए एक स्वच्छ, सरल, उदाहरण खोजने में असमर्थ रहा हूं जिसमें एमवीवीएम ढांचे के भीतर एक निर्भरता संपत्ति है । जब भी मैं usercontrol को datacontext असाइन करता हूं, तो मेरा कोड नीचे विफल रहता है।एमवीवीएम फ्रेमवर्क
मैं कोशिश कर रहा हूँ:
- बुला ItemsControl पर निर्भरता को संपत्ति सेट करें, और
- कि निर्भरता संपत्ति कहा जाता usercontrol की ViewModel करने के लिए उपलब्ध का मूल्य सुनिश्चित करें।
मुझे अभी भी बहुत कुछ सीखना है और ईमानदारी से किसी भी मदद की सराहना करते हैं।
यह शीर्षतम उपयोगकर्ता नियंत्रण में आइटम नियंत्रण है जो निर्भरता गुण TextInControl (किसी अन्य प्रश्न से उदाहरण) के साथ InkStringView उपयोगकर्ता नियंत्रण पर कॉल कर रहा है।
<ItemsControl
ItemsSource="{Binding Strings}" x:Name="self" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<DataTemplate.Resources>
<Style TargetType="v:InkStringView">
<Setter Property="FontSize" Value="25"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
</Style>
</DataTemplate.Resources>
<v:InkStringView TextInControl="{Binding text, ElementName=self}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
निर्भरता संपत्ति के साथ InkStringView उपयोगकर्ता नियंत्रण यहां है।
XAML:
<UserControl x:Class="Nova5.UI.Views.Ink.InkStringView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
x:Name="mainInkStringView"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="{Binding TextInControl, ElementName=mainInkStringView}" />
<TextBlock Grid.Row="1" Text="I am row 1" />
</Grid>
Code-Behind file:
namespace Nova5.UI.Views.Ink
{
public partial class InkStringView : UserControl
{
public InkStringView()
{
InitializeComponent();
this.DataContext = new InkStringViewModel(); <--THIS PREVENTS CORRECT BINDING, WHAT
} --ELSE TO DO?????
public String TextInControl
{
get { return (String)GetValue(TextInControlProperty); }
set { SetValue(TextInControlProperty, value); }
}
public static readonly DependencyProperty TextInControlProperty =
DependencyProperty.Register("TextInControl", typeof(String), typeof(InkStringView));
}
}
आइटम नियंत्रण (या किसी भी व्युत्पन्न वर्ग) के आइटम टेम्पलेट में नियंत्रणों का डेटा कॉन्टेक्स्ट स्वचालित रूप से स्रोत संग्रह में संबंधित आइटम पर WPF द्वारा असाइन किया जाता है। आपके मामले में यह 'स्ट्रिंग' संग्रह से एक तत्व होगा। यदि 'स्ट्रिंग्स' ऑब्जेक्ट्स का एक संग्रह है जिसमें 'टेक्स्ट' प्रॉपर्टी है, तो आप डेटा टेम्पलेट में' TextInControl = "{बाइंडिंग टेक्स्ट} 'के रूप में बाध्यकारी लिखेंगे और * स्पष्ट रूप से * किसी भी अन्य डेटा कॉन्टेक्स्ट को सेट नहीं करेंगे। मैं इस विषय पर पढ़ने का सुझाव दूंगा। – Clemens
देखें [डेटा बाध्यकारी अवलोकन] (http://msdn.microsoft.com/en-us/library/ms752347.aspx) और [डेटा टेम्पलेटिंग अवलोकन] (http://msdn.microsoft.com/en-us/library /ms742521.aspx)। – Clemens
@ क्लेमेंस हाय। ElementName = को छोड़कर ... कॉलिंग आइटम कंट्रोल से अभी भी "मैं पंक्ति 1" प्रदर्शित होने के साथ समाप्त होता हूं और एक रिक्त रेखा जहां पंक्ति 0 पर टेक्स्टब्लॉक होना चाहिए। ??? विचार? –