سؤال

لذلك أنا أحاول نقل برنامج سطح المكتب أدليت به إلى التطبيق ل Windows 8.1 باستخدام Visual Studio 2013. Datagrid تم إهمالها لهذا الإصدار لذلك أحاول ترجمة تلك إلى ListView.لقد استخدمت سابقا ListViews في تطبيقات سطح المكتب الأخرى ، ولكن يبدو أن الكثير قد تغير.المشكلة أواجه هو ملء بلدي ListView من قاعدة البيانات الخاصة بي.أنا على اتصال من خلال WCF Service و يخطو من خلال رمز ، أستطيع أن أرى أنا الحصول على البيانات الصحيحة ، أنا فقط غير قادر على الحصول عليها لتظهر في ليستفيو.بلدي النتيجة النهائية المفضلة ستكون 'ليستفيو' مع 3 أعمدة من المعلومات التي سوف تكون قابلة للتحرير.سابقا أود أن استخدام ListView.View ثم وضع GridView هناك للأعمدة.ولكن يبدو ListView.View تم إهماله تماما مثل GridView.Columns.

هنا هو بلدي زمل ل ListView

<ListView x:Name="lvInventory" Grid.Row="2" Style="{StaticResource listViewStyle}" ItemsSource="{Binding}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Grid Height="200"  Width="200">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <TextBlock x:Name="tbName" Text="{Binding InventoryName}" Width="200" Foreground="#FF0E0D0D" />
                        <TextBox x:Name="tbQty" Grid.Column="1"/>
                        <TextBox x:Name="tbType" Grid.Column="2"/>
                    </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

في بلدي كودبيهيند أنا تعيين إيتمسورس من ليستفيو.

        VMInventory inventory = new VMInventory();            
        inventory.GetList();
        lvInventory.ItemsSource = inventory;

VMInventory هو بلدي ViewModel حيث أنا الحصول على البيانات الخاصة بي من WCF service وهذا يبدو وكأنه:

 public async Task GetList()
    {

            this.connection = new InventoryModelEntities(new Uri(url));
            var filteredList = from o in connection.Inventory
                               where o.Have == false
                               select o;
            var query = await Task.Factory.FromAsync((filteredList as DataServiceQuery).BeginExecute(null, null),
                (result) => (filteredList as DataServiceQuery).EndExecute(result)) as IEnumerable<Aurora.InventoryService.Inventory>;

            this.inventoryList = query.ToList();
            this.currentItem = 0;
            this.onPropertyChanged("Current");
            this.IsAtStart = true;
            this.IsAtEnd = (inventoryList.Count == 0);
}

ملاحظة جانبية أخيرة ، تمكنت من إضافة مربع نص إلى Grid وعندما DataBind إلى text="{Binding Current.InventoryName}" أنا قادر على ربطه بنجاح.

هل كانت مفيدة؟

المحلول

إذا فهمت بشكل صحيح واجهة المستخدم الخاصة بك لا يتم تحديث مع القيم ما من أي وقت مضى إضافة الخاص بك في فيوموديل ، ولكن إذا قمت بإضافة بعض القيمة في واجهة المستخدم فإنه يعكس في فيوموديل.

إذا كان هذا هو الحال ، واستخدام أوبسيرابليكولكتيون بدلا من القائمة ، وإذا كان لديك إنشاء قائمة في كل مرة ، ثم لديك لتنفيذ إينوتيفيبروبيرتيشانجد في فيوموديل الخاص بك.

إذا كنت قد فعلت كل هذا ولكن لا يزال لا يتم تحديث ثم ، إنشاء القائمة في مهمة آسي ، وهي ليست موضوع واجهة المستخدم.إذا كنت تريد تحديث واجهة مستخدم من مؤشر ترابط غير واجهة المستخدم ، فاستخدم تحديث واجهة المستخدم باستخدام المرسل.يمكنك العثور على الكثير من الأمثلة لتحديث واجهة المستخدم من مؤشر ترابط غير واجهة المستخدم باستخدام المرسل

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top