WPF करने के लिए Databinding दूसरा दृश्य

0

सवाल

मैं एक छोटे से खर्च पर एक दिन पर इस समस्या है और मैं बिल्कुल अनजान है । अगर मैं के लिए बटन क्लिक करें शो के दूसरे दृश्य खोलता है, लेकिन सामग्री के बिना. मैं भी एक ब्रेकप्वाइंट में देखें मॉडल. इस के लिए मैं कम कर दिया है सब कुछ करने के लिए एक सरल पाठ बॉक्स और Textblock है कि प्रदर्शन एक ही डेटा है, लेकिन वे नहीं है. वे दिखाने के लिए कुछ भी नहीं है, के बाद भी टाइपिंग बॉक्स में ब्लॉक अद्यतन नहीं करता है. लेकिन क्या कभी मैं कोशिश Databinding काम नहीं करता है. किसी को भी एक विचार है?

धन्यवाद अग्रिम में

मेरी दूसरी देखें

<Window x:Class="AoE4_BO_Overlay.Views.EditorView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:AoE4_BO_Overlay.Views" xmlns:viewmodels="clr-namespace:AoE4_BO_Overlay.ViewModels" d:DataContext="{d:DesignInstance Type=viewmodels:EditorViewModel}"
    mc:Ignorable="d"
    Title="EditorView" Height="450" Width="800">
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="auto" />
        <ColumnDefinition Width="20" />
        <ColumnDefinition Width="20" />
    </Grid.ColumnDefinitions>

    <Grid.RowDefinitions>
        <RowDefinition Height="20" />
        <RowDefinition Height="auto" />
        <RowDefinition Height="auto" />
        <RowDefinition Height="20" />
    </Grid.RowDefinitions>
    <TextBlock Text="{Binding Path=FirstName}" Grid.Column="0" Grid.Row="2"/>
    <TextBox Text="{Binding Path=FirstName , Mode=OneWay}" Grid.Column="0" Grid.Row="1"/>
</Grid>

मेरे ViewModel

    internal class EditorViewModel : Conductor<object>
{
    private string _firstName = "Tom";
    public EditorViewModel()
    {
    }

    public string FirstName
    {
        get
        {

            return _firstName;
        }
        set
        {
            _firstName = value;
            NotifyOfPropertyChange(() => FirstName);
        }
    }
}

कैसे मैं उन दोनों के

        public void CreateBO_Click(object sender, RoutedEventArgs e)
    {
        EditorView createBO = new EditorView();
        ActivateItemAsync(new EditorViewModel());
        createBO.Show();
    }

जानकारी जोड़ा गया

    public partial class EditorView : Window
{
    public EditorView()
    {
        DataContext = new EditorViewModel();
        InitializeComponent();
    }
}
c# caliburn.micro data-binding wpf
2021-11-22 11:39:16
2

सबसे अच्छा जवाब

0

आप दो अलग-अलग मुद्दों:

1. टाइपिंग बॉक्स में परिवर्तन नहीं करता बाध्य संपत्ति:

यह उम्मीद है, के बाद से आप का उपयोग OneWay बाध्यकारी स्पष्ट रूप से. OneWay बाध्यकारी साधन संपत्ति अद्यतन यूजर इंटरफेस है, लेकिन दूसरी तरह के आसपास नहीं. तो बदल FirstName अद्यतन करना चाहिए पाठ बॉक्स है, लेकिन बदलने के पाठ बॉक्स को अद्यतन नहीं करता है FirstName.

काफी दिलचस्प है, अगर आप बस छोड़ Mode = OneWay हिस्सा है, यह काम करना चाहिए के बाद से - बक्सें का उपयोग करना चाहिए TwoWay बाध्यकारी डिफ़ॉल्ट रूप से । मैं सुझाव है कि आप अपने को परिभाषित पाठ बॉक्स बाइंडिंग के लिए स्पष्ट रूप से के रूप में Mode = TwoWay

2. आपके विचार initializes के साथ एक खाली TextBlock / बॉक्स

यह एक कठिन है, नीचे पिन करने के लिए, आप के बाद से नहीं है हमें पता चलता है, जहां आप सेट अपने DataContext. यह आमतौर पर होता है मेरे लिए जब मैं सेट DataContext करने के बाद InitializeComponent(), पहले के बजाय. आप या तो सेट DataContext बंधन से पहले प्रारंभ किया है (के हिस्से के रूप में InizializeComponent()), या आप को बढ़ाने के लिए एक NotifyPropertyChanged पर अपनी संपत्ति के लिए अद्यतन यूआई के बाद.

यदि यह कारण नहीं है, हो सकता है आप को सक्षम करने के लिए WPF बाध्यकारी त्रुटियों में अपने उत्पादन सांत्वना है कि आम तौर पर आप एक अच्छा विचार है, जहां के अपने बाइंडिंग के लिए असफल । विजुअल स्टूडियो के लिए एक विकल्प है कि. यह स्थित होना चाहिए यहाँ:

उपकरण> विकल्प> डिबगिंग -> आउटपुट विंडो -> WPF का पता लगाने सेटिंग्स -> डेटा बाइंडिंग -> सभी

2021-11-22 12:54:14

सबसे पहले, आपको बहुत बहुत धन्यवाद आपके उत्तर के लिए.
rapta asdaf

बहुत बहुत धन्यवाद! मैं खोज करने की जरूरत है एक छोटी सी है, लेकिन मैं यह पाया. "DataContext = नया EditorViewModel();" रेखा है मैं याद आ रही थी.
rapta asdaf

कि ध्वनि सही नहीं है. आप कर रहे हैं यकीन है कि एक नया उदाहरण के EditorViewModel है क्या आप चाहते हैं? आमतौर पर, इस दृष्टिकोण का उपयोग करने के लिए DataContext = this; इससे पहले InitializeComponent();
Shrimperator

यकीन है? नहीं । मैं थोड़ा पढ़ा और कोशिश की कि क्या काम किया है. मेरा समाधान पैदा करता है वांछित परिणाम. अगर मैं की जगह new EditorViewModel() के साथ this यह अब और काम नहीं करता. मैं नहीं जानता अगर यह नपुंसक है, लेकिन मैं का इस्तेमाल किया Caliburn.माइक्रो परियोजना में. सिर्फ अतिरिक्त जानकारी के लिए, मैं क्लास में प्रश्न पोस्ट में.
rapta asdaf
0

मुझे विश्वास है कि आप क्या प्रयास कर रहे हैं यहाँ करने के लिए है दिखाने के अपने दूसरे दृश्य (EditorView) के भीतर पहले से एक (और नहीं के रूप में एक पॉप-अप - यदि आप चाहते हैं करने के लिए यह है के रूप में पॉपअप का उपयोग करें WindowManager के बजाय ActivateItemAsync).

एक बात आप की जरूरत है बदलने के लिए यह संभव बनाने के लिए है यह सुनिश्चित करने के लिए अपने दूसरे दृश्य में एक UserControl और नहीं एक खिड़की है.

// EditorView.xaml.cs
public partial class EditorView : UserControl

// EditView.xaml
<UserControl x:Class="AoE4_BO_Overlay.Views.EditorView"

भी के बाद से अपने का उपयोग कर ActivateItemAsync, आप की आवश्यकता होगी करने के लिए सुनिश्चित करें कि आपके FirstView होता ContendControl नाम के साथ "ActiveItem".

// FirstView.xaml
<ContentControl x:Name="ActiveItem"/>

कॉल करने के लिए ActivateItemAsync होगा इस नियंत्रण का उपयोग करने के लिए लोड के मद्देनजर अपनी दूसरी ViewModel (EditorViewModel). के साथ इस जगह में, आप अब का उपयोग करें ActivateItemAsync विधि लोड करने के लिए देखें.

public async Task CreateBO_Click(object sender, RoutedEventArgs e)
{
   await ActivateItemAsync(new EditorViewModel());
}

कृपया ध्यान दें कि विधि ActivateItemAsync अतुल्यकालिक का समर्थन करता है कॉल और यह वार किया जाएगा कॉल करने के लिए विधि asynchronously.

एक और बात ध्यान दें करने के लिए है कि आप की जरूरत नहीं करने के लिए निर्दिष्ट DataContext स्पष्ट रूप से देखा के रूप में में सेशन यदि आप उपयोग कर रहे हैं Caliburn सूक्ष्म और देखें/ViewModels में संग्रहित कर रहे हैं की सिफारिश की फ़ोल्डर/नामस्थान संरचनाओं. Caliburn सूक्ष्म का उपयोग करता नामकरण सम्मेलनों संबद्ध करने के लिए उपयुक्त देखें viewmodel जोड़े । इस पर अधिक जानकारी में पाया जा सकता आधिकारिक प्रलेखन

2021-11-23 06:48:07

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में